【问题标题】:PHP IIS7 MSSQL Call to undefined function sqlsrv_connectPHP IIS7 MSSQL 调用未定义函数 sqlsrv_connect
【发布时间】:2012-11-22 03:11:50
【问题描述】:

我有 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.:服务器已经重启。

【问题讨论】:

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


【解决方案1】:

如果您使用 sql server 2008 r2,您需要做的就是下载缺少的组件,如数据库管理器和其他类似 microsoft sql server 2008R2 管理对象,并继续下载直到成功

【讨论】:

  • 请花点时间通过引用帮助解决问题所需的包或 php SQL 插件来澄清您的答案。或者,如果您直接了解扩展错误定义的错误消息。
【解决方案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 是因为我更喜欢以字符串形式返回数据(对我来说访问速度更快,而不是解析对象/类类型)。

【讨论】:

    【解决方案3】:

    我自己也遇到了这个问题。我终于把它修好了,所以我想我会分享。


    问题是,虽然我安装了 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,然后按回车键。
      • 在左侧栏中单击您的服务器名称
      • 点击PHP Manager
      • PHP Extensions 下,单击Enable or Disable an Extension
      • 如果您的分机不在Enabled 下,请在Disabled 下查找。找到它后,右键单击它,然后在出现的上下文菜单中单击 Enable
    4. 测试以确保它有效

      • 打开你创建的phpinfo() 页面(你做了,不是吗?),然后查看Registered PHP Streams。如果您在该列表中看到 sqlsrv,则说明您已准备就绪!

    【讨论】:

    • 如果您必须更改任何内容以使其正常工作,请留下评论说明您所做的事情,以便对后来的人有所帮助。
    • 注意:我还必须安装Microsoft® ODBC Driver 11
    • 我有 php 7.2 并按照您的说明进行操作。我可以在 php 管理器中看到扩展 php_sqlsrv_72_ts_x64 和 php_pdo_sqlsrv_72_ts_x64 已启用。但是phpinfo()在注册的PHP流下没有显示sqlsrv,应该检查什么?
    【解决方案4】:

    我了解情况。

    我用的是5.4以上的PHP版本,所以使用PHP驱动为Windows 3.0。

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

    问题解决了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-07-02
      • 2017-12-05
      • 2016-05-30
      • 2018-03-02
      • 2020-07-13
      • 2019-02-13
      • 2016-04-09
      • 1970-01-01
      相关资源
      最近更新 更多