下载一个SQL Server Driver for PHP
这是一个扩展包,我是在这里下载的http://www.microsoft.com/en-us/download/details.aspx?id=20098
根据你的php版本选择对应的安装包。由于我的PHP版本是5.6,所以我下载的是
SQLSRV32.EXE, 运行后选择解压目录为 D:\wamp64\bin\php\php5.6.25\ext我装的是WAMP,这个根据实际打开该目录,里面出现了php_pdo_sqlsrv_52_nts.dllphp_pdo_sqlsrv_52_ts.dllphp_pdo_sqlsrv_53_nts_vc6.dllphp_pdo_sqlsrv_53_nts_vc9.dllphp_pdo_sqlsrv_53_ts_vc6.dllphp_pdo_sqlsrv_53_ts_vc9.dllphp_sqlsrv_52_nts.dllphp_sqlsrv_52_ts.dllphp_sqlsrv_53_nts_vc6.dllphp_sqlsrv_53_nts_vc9.dllphp_sqlsrv_53_ts_vc6.dllphp_sqlsrv_53_ts_vc9.dllSQLServerDriverForPHP.chm(手册,英文够好可以看看)
SQLServerDriverForPHP_License.rtfSQLServerDriverForPHP_Readme.htm(自述文件)
等等。。。1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
配置php.ini
(1)在php.ini中添加如下两条扩展:extension=php_sqlsrv_56_ts.dllextension=php_pdo_sqlsrv_56_ts.dll1
2
(2)将;extension=php_pdo.dll前面的;去掉,开启pdo连接扩展··这个dll是旧版本php需要配置的,5.6版本没有这个dll
(3)重新启动apache或者IIS,备注:不要用***_nts.dll的文件,这样就会失败,ts和nts的意思是:是否线程安全。和php版本有关,用phpinfo();查看,打印出phpinfo,找到Thread Safety,如果是disabled就是非线程安全就用nts版本;如果是enable就用ts版本。extension=php_sqlsrv_56_nts.dllextension=php_pdo_sqlsrv_56_nts.dll1
2
如果使用的php版本是64位的话(这里的64位可能是指WAMP64或者win7 64),官网的 php_sqlsrv_xx_ts.dll和 php_pdo_sqlsrv_xx.tl.dll 不起作用,网友收集了对应的64位版本dll,请到
http://pan.baidu.com/s/1kUCP7EJ
下载选择对应版本即可。(我环境下确实官方的无效,用的是非官方才有效)
(4)这时候你在phpinfo()中的PDO配置中会看见已经存在sqlsrv了。这个非常重要,包括ORACLE也是,只有出现OCI才算支持。否则代码就别去测试了,肯定不行的。
(5)然后查找 PHP.INI mssql.secure_connection 把值改为on(没测试是否必须)
下载MS SQL SERVER Native Client安装分64和32位的,根据自己系统来装
亲测必须的,可能WAMP服务器和MSSQL服务器在一起就不需要了,这个部分还是以sqlsvr是否在PHPINF()中显示出来为准。有了这步就不用了。
下载安装一个Microsoft® ODBC Driver 11 for SQL Server
To access data in a SQL Server 2005 or later database using the Microsoft Drivers for PHP for SQL Server (SQL Server 2008 or later if using version 3.2 or 3.1), you must have the following components installed on your computer:
结语
配置的难点在于确定php版本以及SQL Server Driver for PHP的对应关系。关键的关键是看
phpinfo(),有了SQLSVR的字样代表PHP 支持MSSQL了,如果有其他问题就是代码或者配置文件出错了
在原生PHP下的测试代码$serverName="x.x.x.x";//serverName\instanceName$connectionInfo=array("Database"=>"dbname","UID"=>"name","PWD"=>"pw");$conn= sqlsrv_connect($serverName,$connectionInfo);if($conn) {echo"Connection established.
";}else{echo"Connection could not be established.
";die( print_r( sqlsrv_errors(),true));}
在THINKPHP下的配置和使用(多数据库配置的方法):由于TP5是支持PDO,配置好文件后,使用上和MYSQL是一样的
新建DATABASE1return[//数据库类型'type'=>'sqlsrv',//服务器地址'hostname'=>'x.x.x.x',//数据库名'database'=>'dbname',//用户名'username'=>'NAME',//密码'password'=>'PW',//端口'hostport'=>'1433',//连接dsn'dsn'=>'',//数据库连接参数'params'=> [],//数据库编码默认采用utf8'charset'=>'utf8',//数据库表前缀'prefix'=>'',//数据库调试模式'debug'=>true,
config文件引入多数据库配置$dbcon=require_once('database1.php');return[// +----------------------------------------------------------------------// |应用设置// +----------------------------------------------------------------------'database1'=>$dbcon,
PHP代码:多配置下的MSSLQ表查询$dbDB=\think\Db::connect('database1')->table("gbpm.PTTFORM2008")->select();dump($dbDB);die;
附录
SQLServer 查询当前配置的字符编码:SELECT COLLATIONPROPERTY('Chinese_PRC_Stroke_CI_AI_KS_WS', 'CodePage')1
下面是查询结果对应表:返回值编码信息936简体中文GBK
950繁体中文BIG5
437美国/加拿大英语
932日文
949韩文
866俄文
65001unicode UFT-8