Windows下连接php5.3+sql server2008

php连接sql server真是一件闹心的事,

折腾了许久,今天有了点起色,还是不错的。

mssql extension is not available anymore on Windows with PHP 5.3 or later.

也就是说extension=php_mssql.dll是没有效果的,不管用了。php不支持用php_mssql.dll连接sql server了,

这个时候怎么办呢?

微软官方有dll支持,

各种上网查询,听说用SQLSRV20.EXE管用,

1.下载SQLSRV20.EXE

第一个SQLSRV20.EXE是用于sql server 2005或者sql server2008的。

第二个SQLSRV30.EXE是用于sql server 20010或者sql server 2012的。

2.解压SQLSRV20.EXE后,又是一个面临选择的问题,

如下图,

这里面有很多,到底选择哪个呢?

SQLSRV20.exe,即MicrosoftDriver 2.0 for PHP for SQL Server(sql server 2005 及2008使用SQLSRV20.exe, SQL Server 2010使用SQLSRV30.exe)(需要其中的php_pdo_sqlsrv_52_ts_vc6.dll和php_sqlsrv_52_ts_vc6.dll);其中,52表示 php5.2,53表示php5.3,ts表示线程安全,nts表示非线程安全,vc6表示用vc6(vs2005)编译的,vc9表示用vs2008编译的,vc6适用于apache,vc9适用于IIS。

经过筛选之后,

3.选择了php_sqlsrv_53_ts_vc6.dll

和php_pdo_sqlsrv_53_ts_vc6.dll

将其

4.放入php文件夹下的ext中

5.并且配置php.ini

添加

extension=php_pdo_sqlsrv_53_ts_vc6.dll
extension=php_sqlsrv_53_ts_vc6.dll 

6.重启apache

发现报错了,

非常郁闷,说好的vc6的呢?!!!

这个时候,我尝试了vc9,替换了vc6

然后重启apache可以了。说好的vc9用于IIS的呢?

也许是适合用于IIS,但是同样可以用于apache吧!

这个时候通过

7.查看phpinfo发现已经有了sqlsrv的支持

然后进行代码连接测试,

8.首先要确保sql server2008正常,

我设置了sa用户的密码为123456,

sql server2008是正常的,

好,

9.测试!

<?php
$serverName = "纪庆";
$connectionOptions = array("UID"=>"sa","PWD"=>"123456","Database"=>"master");
$conn = sqlsrv_connect( $serverName, $connectionOptions);
if( $conn === false ){
  die('不能打开连接');
}
$tsql = "SELECT TOP 3 * FROM spt_values";//注意,这里是mssql,不能用limit
$result = sqlsrv_query($conn, $tsql, $params);
if ( $result === false){
 print_r(sqlsrv_errors());exit;
}
if(sqlsrv_has_rows($result))
{
 $rowCount = sqlsrv_num_rows($result);
 while( $row = sqlsrv_fetch_array( $result, SQLSRV_FETCH_ASSOC))
 {
  echo iconv("gb2312",   "utf-8", $row['name'])."<br>";//连接的mssql数据库肯定是中文的,需要转码
 }
}
else
{
 echo '没有数据';
}

服务器名称:纪庆

用户名:sa

密码:123456

数据库:master

表:spt_values

查询结果如下:

rpc
pub
sub

至此,算是成功了吧!

继续测试其他主机也是可以的,

$serverName="192.168.70.119";

这里的服务器名称改为了另一台机器的ip,

对应的用户名sa

密码123456

数据库master

表spt_values都是一样的

只是数据我修改了,将第一条修改为jiqing

测试结果:

jiqing
pub
sub

发现也是成功的!

10.测试pdo_sqlsrv

<?php
try {
   $conn = new PDO( "sqlsrv:Server=192.168.70.119;Database=master",'sa', '123456'); 
   $conn->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
}

catch( PDOException $e ) {
   die( "Error connecting to SQL Server".$e->getMessage() ); 
}

echo "Connected to SQL Server<br/>";

$query = 'select top 3 * from spt_values'; 
$stmt = $conn->query( $query ); 
while ( $row = $stmt->fetch( PDO::FETCH_ASSOC ) ){ 
   print_r( $row ); 
}
?>

结果:

Connected to SQL Server
Array ( [name] => jiqing [number] => 1 [type] => A [low] => [high] => [status] => 0 ) Array ( [name] => pub [number] => 2 [type] => A [low] => [high] => [status] => 0 ) Array ( [name] => sub [number] => 4 [type] => A [low] => [high] => [status] => 0 )

也是可以的。

原文地址:https://www.cnblogs.com/jiqing9006/p/3369914.html