设为首页 收藏本站
查看: 868|回复: 0

[经验分享] PHP连接Microsoft SQL Server 2000/2005/2008

[复制链接]

尚未签到

发表于 2016-5-22 12:19:06 | 显示全部楼层 |阅读模式
工作总结之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

 

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

  
连接数据库

  
使用过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提供有关服务器的信息。
  
另可参考 PHP手册

  
概念

  
SQLSRV 常量

  
其他资源

  
SQL Server Driver for PHP 介绍
     编程指南

入门

PS:经测试这个扩展支持 MSSQL 2000/2005/2008全系列,这样完全可以不用PHP原来自带的php_mssql.dll了,而且最新的PHP5.3也没带php_mssql.dll了 2010-06-28

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-220348-1-1.html 上篇帖子: CUDA的VISUAL STUDIO 2008环境配置(转) 下篇帖子: NET:2008年中国.NET技术应用趋势分析
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表