您的位置:首页 > 编程语言 > PHP开发

Thinkphp使用PDO方式连接MSSQL2000、sqlserver数据库的方法,PHP版本是PHP5.2

2012-07-19 15:43 976 查看
最近公司的一个项目需要PHP结合sqlserver2000开发,发现Thinkphp是个不错的php框架,于是折腾了起来。

但是发现Thinkphp对mssql2000数据库进行操作出现了很多问题,在查了N多资料与N次尝试后,总算是得到解决,现在把方法分享一下。

Thinkphp是国内比便流行的wamp开发框架,这里就不多介绍了。

开始用的是wamp的php5.3的,怎么试都不行,Thinkphp本身对sql2000也不是很支持,集成的数据库驱动也是sql2005的,最后发现对sql2000都支持都不是很好。转下把php降到php5.2.9,开启extension=php_pdo_mssql.dll,否则用下面的pdo连接会提示 “could not find driver” 启动pdo连接,如下设置:

conf.php里设置如下,注意这段是错误的配置

//PDO连接方式

‘DB_TYPE’ => ‘pdo’, // 数据库类型

‘DB_USER’ => ‘aa’, // 用户名

‘DB_PWD’ => ‘aa’, // 密码

‘DB_PREFIX’ => ‘ct_’, // 数据库表前缀

‘DB_DSN’ => ‘mssql:host=localhost;dbname=ctphp;charset=gb2312′,

最后连接正常,却提示

由于目前PDO暂时不能完美支持MSSQL 请使用官方的MSSQL驱动

开始不明白它的意思,后了想了想这个官方可能指的是微软mssql。于是再找资料,结果下面一段的资料很有用。

windows系统下,PHP5.3以上的版本已经不支持mssql扩展,所以如果你需要和sql server通信需要到http://msdn.microsoft.com/en-us/sqlserver/ff657782.aspx点get it,就会跳到http://www.microsoft.com/en-us/download/details.aspx?id=20098自行下载微软提供的The SQL Server Driver for PHP。我这里下载的是SQLSRV20.EXE这是一个自解压文件,解压后会得到以下几个文件:

php_sqlsrv_52_nts_vc6.dll

php_sqlsrv_52_ts_vc6.dll

php_sqlsrv_53_nts_vc6.dll

php_sqlsrv_53_nts_vc9.dll

php_sqlsrv_53_ts_vc6.dll

php_sqlsrv_53_ts_vc9.dll

php_sqlsrv_license.rtf

SQLServerDriverForPHP.chm

SQLServerDriverForPHP_Readme.htm

其中,52,53表示PHP的5.2.X和5.3.X的版本;nts表示非线和安全,ts表示线程安全;vc6表示使用Apache作为Web Server,vc9表示使用IIS作为Web Server。

根据您的配置,将相应的DLL文件拷贝到php安装目录的ext文件夹中,接下来打开php.ini,添加以下语句打开php_sqlsrv和php_pdo_sqlsrv扩展:

由于用的是pdo,就在php.inij里的extension一节加下入面文字

—————————————————————-

extension=php_pdo_sqlsrv_52_ts_vc6.dll

—————————————————————

这里的52表示的是php5.2,如果你的是5.3版,就改成53,如果你的PHP版本是线程安全的,那么你的PHP安装目录下应该有一个php5ts.dll,与这里的两行语句对应,如果是php5nts.dll,那么上面的语句应该是:

—————————————————————-

extension=php_pdo_sqlsrv_53_nts_vc6.dll

————————————————————

压缩包里有各个版本对于的dll文件,大家可以去仔细核查。

开启扩展后,重启apache,这样就可以连接sqlserver了,但是还有一点要注意,如果你没有安装Microsoft SQL Server 2008 R2 Native Client,必须去http://msdn.microsoft.com/en-us/library/cc296170(SQL.90).aspx下载安装,因为微软的这个扩展包需要这个支持。

最后连接是有了。不过根据提示都可以搞定,发现它的DSN连接要稍稍改正。具体看下面的全部数据库相关参数配置。

<?php

return array(

//PDO连接方式

‘DB_TYPE’ => ‘pdo’, // 数据库类型

‘DB_USER’ => ‘aa’, // 用户名

‘DB_PWD’ => ‘aa’, // 密码

‘DB_PREFIX’ => ‘ct_’, // 数据库表前缀

‘DB_DSN’ => ‘sqlsrv:Server=localhost;Database=ctphp’,//服务器名称用的不是host而是Server,数据库名称不是Data而是Database.可以在先前下载的文件SQLServerDriverForPHP.chm里找到

);

?>

看php关于 mssql的pdo连接手册如下

$c = new PDO(“sqlsrv:Server=localhost,1521;Database=testdb”, “UserName”, “Password”);

本文来源于淘福网论坛 http://taofucn.com/vps/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: