Windows下连接php5.3+sql server2008

时间:2023-03-09 00:17:54
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

Windows下连接php5.3+sql server2008

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

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

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

如下图,

Windows下连接php5.3+sql server2008

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

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的支持

Windows下连接php5.3+sql server2008

Windows下连接php5.3+sql server2008

然后进行代码连接测试,

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

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

Windows下连接php5.3+sql server2008

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', '');
$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] => [type] => A [low] => [high] => [status] => ) Array ( [name] => pub [number] => [type] => A [low] => [high] => [status] => ) Array ( [name] => sub [number] => [type] => A [low] => [high] => [status] => )

也是可以的。