PHP IIS7 MSSQL 调用未定义函数sqlsrv_connect

5
我有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:\inetpub\wwwroot\89.111.180.28\index.php on line 18

请告诉我为什么会出现错误以及如何解决?与此相关的IT技术。请注意,服务器已经重新启动。

1
你已经下载了 SQLSRV30.EXE 文件,对吧?http://www.microsoft.com/en-us/download/details.aspx?id=20098 - gen_Eric
@RocketHazmat 是的,我安装了它。 - Leo Loki
4个回答

4

我刚刚自己遇到了这个问题。最终我解决了它,所以我想分享一下。


问题在于,尽管我已经安装了sqlsrv dll(复制到我的php/ext文件夹中),并且已将其添加到我的php.ini中,在IIS中,它是禁用的

以下是一些逐步说明,以防任何人再次遇到此问题。 (或供我以后参考 :))

  1. 下载并安装SQL Server驱动程序 (.dll)

    • 运行.exe文件进行安装,并在询问解压缩路径时输入您的php扩展文件夹的路径。
      • 要查找当前扩展目录,请运行(cmd.exe)php -i | more,然后查找extension_dir行。(对我来说,它在第四次按下more键时出现)。或者,创建一个简单的php文件,仅包含<?php phpinfo(); ?>,并在浏览器中运行它。这将提供相同的信息,但以更易于阅读的格式呈现。
  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下,单击启用或禁用扩展名
    • 如果您的扩展名不在已启用下,请在已禁用下查找它。找到后,右键单击它,在出现的上下文菜单中单击启用
  4. 测试以确保它起作用了

    • 打开您制作的那个phpinfo()页面(您做了吗?),并查看Registered PHP Streams下是否有sqlsrv。如果在列表中看到它,则表示设置成功!

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

3
你的答案确实帮助我调试了我的问题。为了回答其他可能已经成功安装了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之间的区别,请参考此帖子:

我选择PDO,因为我更喜欢将数据返回为字符串(对我来说访问速度更快,而不是解析对象/类类型)。

0

你所需要做的就是下载缺失的组件,例如数据库管理器和其他类似于Microsoft SQL Server 2008R2管理对象,如果你使用SQL Server 2008 R2,则需要不断下载直到成功为止。


请花点时间通过引用所需的包或php SQL插件来澄清您的答案,以帮助解决问题。或者,如果您直接了解错误消息,请扩展错误的定义。 - Mark Carpenter Jr

0

我明白情况。

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

对于这种配置,需要SQL 2012客户端版本,但我只安装了客户端SQL 2008版本。

问题已经解决。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接