PHP IIS7 MSSQL调用未定义的函数sqlsrv_connect

时间:2012-12-04 13:15:19

标签: php sql-server-2008 iis-7

我有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.ini的行,但我在php.info中看不到扩展名为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:\inetpub\wwwroot\89.111.180.28\index.php on line 18

请告诉我,为什么我有错误,怎么做对了?

p.s。:服务器已经重启。

4 个答案:

答案 0 :(得分:2)

你的答案肯定帮我调试了我的问题。对于可能已成功安装PHP PDO SQLSRV .dll模块但仍然得到相同错误的其他人,请添加回答此问题。

我花了差不多一个小时来解决这个问题,但即使我配置了PHP_PDO_SQLSRV,函数sqlsrv_connect()仍然无法正常工作。

发现它是因为如果您使用PDO sqlsrv扩展,它有自己的库,具有单独的功能。

要连接到数据库,您可以执行以下操作:

$conn = new PDO("sqlsrv:Server=localhost;Database=testdb", "UserName", "Password");

您可以在此处查看所有这些内容:

http://msdn.microsoft.com/en-us/library/ff628159(v=sql.105).aspx

如果您不确定PDO与普通SQLSRV之间的区别,请参阅这篇文章:

SQLSRV driver vs. PDO driver for PHP with MS SQL Server

我之所以选择PDO,是因为我更喜欢将数据作为字符串返回(对我而言更快,而不是解析对象/类类型)。

答案 1 :(得分:2)

我自己就是这个问题。我终于修好了,所以我想我会分享。

问题是,虽然我安装了sqlsrv dll(复制到我的php / ext文件夹),我把它添加到我的php.ini中,在IIS中,它被“禁用”

以下是一些分步说明,以防有人再次遇到同样的问题。 (或者为了将来我的参考:))

  1. Download (and install) the SQL Server drivers(。dll)

    • 通过运行.exe安装它们,并在询问您解压缩它们的位置时键入php扩展文件夹的路径。
      • 要查找当前的扩展目录,请运行(cmd.exe)php -i | more,然后查找行extension_dir。 (对我而言,这是more的第四次新闻。或者,制作一个仅包含<?php phpinfo(); ?>的简单php文件,并在浏览器中运行它。这将提供相同的信息,但格式更容易阅读。
  2. 将扩展名添加到php.ini

    • 要找到合适的php.ini,请再次运行php -i | more,查找Loaded Configuration File,或再次检查该简单的PHP脚本(我强烈建议您制作它 - 它会节省您的时间和努力)。您在那里找到的路径是您需要编辑的文件。
    • 将以下行添加到php.ini中,并保存:

      [PHP_SQLSRV] extention=php_sqlsrv_56_nts.dll

  3. 在IIS管理器中启用扩展程序

    • 在开始菜单中,输入IIS Manager,然后按enter键。
    • 点击左侧栏中的服务器名称
    • 点击PHP Manager
    • PHP Extensions下,点击Enable or Disable an Extension
    • 如果您的扩展程序不在Enabled下,请在Disabled下查找。找到它后,右键单击它,然后在出现的上下文菜单中单击Enable
  4. 测试以确保其有效

    • 打开你所做的phpinfo()页面(你做了,不是吗?),并查看Registered PHP Streams下的内容。如果您在该列表中看到sqlsrv,那么您已设置好了!

答案 2 :(得分:0)

我了解情况。

我使用的是5.4以上的PHP版本,因此使用PHP驱动程序用于Windows 3.0。

对于此配置,SQL 2012所需的客户端版本,但我一直是客户端SQL 2008版本

问题解决了。

答案 3 :(得分:0)

如果您使用的是sql server 2008 r2,则只需下载丢失的组件(例如数据库管理器)和其他组件(例如microsoft sql server 2008R2管理对象),然后继续下载直到获得成功