我有MSSQL Server 2008、MS WINDOWS Server 2008 RC2和PHP 5.4
php.info有行
[PHP_PDO_SQLSRV_54_NTS]
extension=php_pdo_sqlsrv_54_nts.dll
[PHP_PDO_ODBC]
extension=php_pdo_odbc.dll
[PHP_SYBASE_CT]
extension=php_sybase_ct.dll
[PHP_SQLSRV_54_NTS]
extension=php_sqlsrv_54_nts.dll
在此处找到Php信息http://89.111.180.28/index.php
我在php.info中看到了带有扩展php.ini的行,但没有看到带有扩展SQLSRV的行…
对于连接到MSSQL SERVER,我使用脚本
$conn_array = array (
"UID" => "user",
"PWD" => "passw",
"Database" => "database",
"Encrypt" => 1,
"TrustServerCertificate" => 1) ;
$conn2 = sqlsrv_connect('localhost' , $conn_array);
if ($conn2)
{
echo 'MSSQL Connection successful';
}
else
{
die( print_r( sqlsrv_errors(), true));
}
sqlsrv_close( $conn2 );
但我看到错误:
Fatal error: Call to undefined function sqlsrv_connect() in C:inetpubwwwroot89.111.180.28index.php on line 18
请告诉我为什么我有错误,以及如何做出正确的决定?
p.s.:服务器已重新启动。
我自己刚刚遇到这个问题。我终于把它修好了,所以我想分享一下。
问题是,尽管我安装了sqlsrv dll(复制到我的php/ext文件夹),和我在php.ini中添加了它,在IIS中,它被"禁用"了。
以下是一些循序渐进的说明,以防有人再次遇到同样的问题。(或者供我将来参考:))
-
下载(并安装)SQL Server驱动程序(.dll)
- 通过运行.exe安装它们,当它询问您在哪里解压缩它们时,键入php扩展文件夹的路径。
- 要查找当前扩展目录,请运行(cmd.exe)
php -i | more
,然后查找行extension_dir
。(对我来说,这是more
的第四次印刷)。或者,制作一个只包含<?php phpinfo(); ?>
的简单php文件,并在浏览器中运行它。这将提供相同的信息,但格式更易于阅读
- 要查找当前扩展目录,请运行(cmd.exe)
- 通过运行.exe安装它们,当它询问您在哪里解压缩它们时,键入php扩展文件夹的路径。
-
将扩展名添加到php.ini
- 要找到正确的php.ini,请再次运行
php -i | more
,查找Loaded Configuration File
,或者再次检查那个简单的php脚本(我强烈建议您制作它,这样可以节省时间和精力)。你在那里找到的路径就是你需要编辑的文件 -
在php.ini中添加以下行并保存:
[PHP_SQLSRV] extention=php_sqlsrv_56_nts.dll
- 要找到正确的php.ini,请再次运行
-
在IIS Manager 中启用扩展
- 在"开始"菜单中,键入
IIS Manager
,然后按enter键 - 单击左侧栏中的服务器名称
- 单击
PHP Manager
- 在"
PHP Extensions
"下,单击"Enable or Disable an Extension
"> - 如果扩展名不在
Enabled
下,请在Disabled
下查找它。找到它后,右键单击它,然后在出现的上下文菜单中单击Enable
- 在"开始"菜单中,键入
-
测试以确保其工作
- 打开你制作的
phpinfo()
页面(你做了,不是吗?),然后在Registered PHP Streams
下面查看。如果你在列表中看到sqlsrv
,你就做好了准备
- 打开你制作的
您的回答无疑帮助我调试了问题。为其他可能已经成功安装了PHP PDO SQLSRV.dll模块但仍然收到相同错误的人回答这个问题。
我花了将近一个小时才弄清楚,但即使在配置了PHP_PDO_SQLRV之后,函数sqlsrv_connect()
仍然不起作用。
发现这是因为如果您使用的是PDO-sqlsrv扩展,它有自己的带有单独函数的库。
要连接到数据库,您需要执行以下操作:
$conn=新PDO("sqlsrv:Server=localhost;Database=testdb","用户名","密码")
您可以在此处查看所有内容:
http://msdn.microsoft.com/en-us/library/ff628159(v=sql.105).aspx
如果你不确定PDO和普通SQLRV之间的区别,请参阅这篇文章:
适用于带有MS SQL Server 的PHP的SQLSRV驱动程序与PDO驱动程序
我选择PDO是因为我更喜欢将数据作为字符串返回(对我来说,访问速度更快,而不是解析对象/类类型)。
我了解情况。
我使用的是PHP 5.4以上版本,所以使用的是适用于Windows3.0的PHP驱动程序。
对于此配置,需要客户端版本的SQL 2012,但我一直是客户端版本的2008版
问题解决了。
如果您使用sql server 2008 r2,您所需要做的就是下载遗漏的组件,如数据库管理器和其他类似microsoft sql server 2008R2的管理对象,并继续下载,直到您成功获得