PHP连接Microsoft SQL Server 2000/2005/2008

来源:互联网 发布:暖气安装注意事项知乎 编辑:程序博客网 时间:2024/06/06 10:47
PHP连接Microsoft SQL Server 2000/2005/2008




最近由于工作需要用于SQL Server,想做一个测试环境,SQL Server 2008不是刚出来,图个新鲜,就下载了2008版的,用了很多方法一直没能连接上SQL Server 2008。在网上找了一些资料,终于连接上了SQL Server 2008,整理了一下收集到的资料,利用中午休息时间,写个贴子发出来,让大家看看。呵呵!!






PHP自带的MSSQL扩展php_mssql.dll原来是给SQL Server 2000用的,难怪连接不上2008?! -_-!!要使用SQL Server 2005以上版本,就要用到微软为PHP提供的最新第三方扩展SQL Server Driver for PHP才行,最新版本是2.0的,下载地址:






SQL Server Driver for PHP 1.1 (2009-10)


http://www.microsoft.com/downloads/details.aspx?familyid=CCDF728B-1EA0-48A8-A84A-5052214CAAD9&displaylang=en


SQL Server Driver for PHP 2.0 CTP1(2010-04)


http://www.microsoft.com/downloads/details.aspx?familyid=DF4D9CC9-459C-4D75-A503-AE3FCEB85860&displaylang=en


或者:http://www.microsoft.com/sqlserver/2005/en/us/PHP-Driver.aspx

想看中文详细使用资料可参考MSDN的,地址:


http://msdn.microsoft.com/zh-cn/library/cc296170(SQL.90).aspx








先来复习一下怎么样用PHP自带的扩展php_mssql.dll连接SQL Server 2000,用mssql系列函数来操作,和操作MySQL的一样。


1、打开PHP配置文件php.ini,找到;extension=php_mssql.dll把前面的分号去掉。


2、找到mssql.secure_connection = Off修改成 mssql.secure_connection = On。


3、把PHP文件夹下的php_mssql.dll和ntwdblib.DLL这两个文件拷贝到C:\windows\system32\文件夹下。


4、重启Apache,OK



测试一下:








<?php


//用mssql_connect


$conn=mssql_connect('localhost','pandao','1987') or die('数据库连接不上');


mssql_select_db('test',$conn);


//query语句


$Query="select * from news";


$AdminResult=mssql_query($Query);


//输出结果


$Num=mssql_num_rows($AdminResult);


for($i=0;$i<$Num;$i++)


{


$Row=mssql_fetch_array($AdminResult);


echo($Row[1]);


echo("<br/>");


}


?>
复制代码


当然还可以用pdo和ODBC来连接SQL Server。








准备工作








下载驱动程序,我下载的是2.0的,下载后安装释放程序,里面有以下文件:


php_pdo_sqlsrv_52_nts.dll


php_pdo_sqlsrv_52_ts.dll


php_pdo_sqlsrv_53_nts_vc6.dll


php_pdo_sqlsrv_53_nts_vc9.dll


php_pdo_sqlsrv_53_ts_vc6.dll


php_pdo_sqlsrv_53_ts_vc9.dll


php_sqlsrv_52_nts.dll


php_sqlsrv_52_ts.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


SQLServerDriverForPHP.chm(手册,英文够好的话,可以看看,嘿嘿)


SQLServerDriverForPHP_License.rtf


SQLServerDriverForPHP_Readme.htm(自述文件)






下面是自述文件里的内容,我翻译一下:






驱动程序文件
 PHP 版本
 线程安全性
 用于PHP .dll
 
php_sqlsrv_53_nts_vc6.dll


php_pdo_sqlsrv_53_nts_vc6.dll
 5.3
 no
 php5.dll
 
php_sqlsrv_53_nts_vc9.dll


php_pdo_sqlsrv_53_nts_vc9.dll
 5.3
 no
 php5.dll
 
php_sqlsrv_53_ts_vc6.dll


php_pdo_sqlsrv_53_ts_vc6.dll
 5.3
 yes
 php5ts.dll
 
php_sqlsrv_53_ts_vc9.dll


php_pdo_sqlsrv_53_ts_vc9.dll
 5.3
 yes
 php5ts.dll
 
php_sqlsrv_52_nts.dll


php_pdo_sqlsrv_52_nts.dll
 5.2
 no
 php5.dll
 
php_sqlsrv_52_ts.dll


php_pdo_sqlsrv_52_ts.dll
 5.2
 yes
 php5ts.dll
 






关于VC6和VC9的区别,还有非线程安全与线程安全






VC6 版本是使用 Visual Studio 6 编译器编译的,如果你是在windows下使用Apache+PHP的,请选择VC6版本。


VC9 版本是使用 Visual Studio 2008 编译器编译的,如果你是在windows下使用IIS+PHP的,请选择VC9版本。


Non Thread Safe就是非线程安全,在执行时不进行线程(Thread)安全检查;


Thread Safe 是线程安全,执行时会进行线程(Thread)安全检查,以防止有新要求就启动新线程的 CGI 执行方式而耗尽系统资源;








开始配置








我用的是APMserv 搭建的PHP环境(Apache 2.2.9+PHP 5.2.6+MySQL 5.1.28),想用线程安全的,所以选择php_sqlsrv_52_ts.dll和php_pdo_sqlsrv_52_ts.dll。


开始工作,先把文件拷贝到PHP文件夹下的ext目录下,然后在配置文件php.ini
的Extensions后面加上:


;extension=php_sqlsrv_52_ts.dll


;extension=php_pdo_sqlsrv_52_ts.dll


再重启Apache。


最后测试一下是否成功,看一下phpinfo的sqlsrv


  


下载 (16.53 KB)
sqlsrv


2010-6-5 13:13






如图所示这样就表示连接成功了!!开始工作喽!






连接数据库






使用过SQL Server的人应该都清楚,SQL Server常用的有两种认证方式,一种是本地系统账户认证(Windows Authentication ),一种是使用用户名和密码(SQL Server Authentication ),第二种认证方式必须启用SQL Server的混合模式。






1.Windows Authentication连接部分代码段












<?php


$serverName = "(local)";


$connectionInfo = array("Database"=>"test","ConnectionPooling"=>false);


$conn = sqlsrv_connect( $serverName, $connectionInfo);


if( $conn == false)


{


    echo "连接失败!";


    die( print_r( sqlsrv_errors(), true));


}


?>
复制代码






2.SQL Server Authentication连接部分代码段












<?php


$serverName = "(local)"; //数据库服务器地址


$uid = "pandao"; //数据库用户名


$pwd = "1987"; //数据库密码


$connectionInfo = array("UID"=>$uid, "PWD"=>$pwd, "Database"=>"test");


$conn = sqlsrv_connect( $serverName, $connectionInfo);


if( $conn == false)


{


    echo "连接失败!";


    die( print_r( sqlsrv_errors(), true));


}


$query = sqlsrv_query($conn, "SELECT TOP 10 nid,title,content FROM test.dbo.news");


while($row = sqlsrv_fetch_array($query)){


    echo $row['nid']."-----".$row['title']."<br/>";


}


?>
复制代码






由于我电脑没装SQL Server 2005,所以没有测试,SQL Server Driver for PHP是给2005和2008用的,应该是一样的,大家在时间可以测试一下,看是不是一样。


微软为PHP新增加了操作SQL Server 2005/2008的函数sqlsrv系列,下面是sqlsrv API,用法跟操作MySQL的基本一样,可以参考学习一下。


在PHPchina混了N久了,还是第一次在PHPchina发原创贴,在下文笔不行,写得不好,欢迎大家拍砖!


相关参考文章:


微软提供给PHP5的SQL Server扩展: sqlsrv (转载)


PHP连接SQL Server 2005 和 SQL Server 2008








API 参考 (SQL Server Driver for PHP) 








用于 SQL Server Driver for PHP 的 API 名称是 sqlsrv。所有 sqlsrv函数都以 sqlsrv_打头,后跟动词或名词。后跟动词的函数用于执行特定操作,而后跟名词的函数用于返回特定形式的元数据。


SQL Server Driver for PHP 包含以下函数:






函数 说明 
sqlsrv_begin_transaction 开始事务。 
sqlsrv_cancel 取消语句;并放弃相应语句的所有未决结果。 
sqlsrv_client_info 提供有关客户端的信息。 
sqlsrv_close 关闭连接。释放与相应连接关联的所有资源。 
sqlsrv_commit 提交事务。 
sqlsrv_configure 更改错误处理和日志记录配置。 
sqlsrv_connect 创建一个连接,并将其打开。 
sqlsrv_errors 返回关于上一操作的错误和/或警告信息。 
sqlsrv_execute 执行预定义语句。 
sqlsrv_fetch 使下一行的数据可供读取。 
sqlsrv_fetch_array 以数值索引数组、关联数组或这两种数组的形式检索下一行的数据。 
sqlsrv_fetch_object 以对象形式检索下一行的数据。 
sqlsrv_field_metadata 返回字段元数据。 
sqlsrv_free_stmt 关闭语句。释放与相应语句关联的所有资源。 
sqlsrv_get_config 返回指定配置设置的值。 
sqlsrv_get_field 按索引检索当前行中的字段。可以指定 PHP 返回类型。 
sqlsrv_has_rows 检测结果集是否具有一行或多行。 
sqlsrv_next_result 使下一结果可供处理。 
sqlsrv_num_rows 报告结果集中的行数。 
sqlsrv_num_fields 检索活动结果集中的字段数。 
sqlsrv_prepare 准备 Transact-SQL 查询,但不执行该查询。隐式绑定参数。 
sqlsrv_query 准备 Transact-SQL 查询,并将其执行。 
sqlsrv_rollback 回滚事务。 
sqlsrv_rows_affected 返回有所修改的行的数目。 
sqlsrv_send_stream_data 在每次调用函数时向服务器发送最多八千字节 (8 KB) 的数据。 
sqlsrv_server_info 提供有关服务器的信息。 

原创粉丝点击