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.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

请告诉我为什么我有错误以及如何正确?

ps:服务器已经重启。

4

4 回答 4

4

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


问题是,虽然我安装了 sqlsrv dll(复制到我的 php/ext 文件夹),并且我将它添加到我的 php.ini 中,但在 IIS 中,它是 'disabled'

这里有一些分步说明,以防有人再次遇到同样的问题。(或供我将来参考:))

  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,单击Enable or Disable an Extension
    • 如果您的分机不在 下方Enabled,请在下方查找Disabled。找到它后,右键单击它,然后单击Enable出现的上下文菜单。
  4. 测试以确保它有效

    • 打开您创建的phpinfo()页面(您做了,不是吗?),然后查看Registered PHP Streams. 如果您sqlsrv在该列表中看到,则说明您已设置好!
于 2016-01-26T03:06:27.957 回答
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 之间的区别,请参考这篇文章:

SQLSRV 驱动程序与带有 MS SQL Server 的 PHP 的 PDO 驱动程序

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

于 2015-01-06T22:47:35.077 回答
0

我了解情况。

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

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

问题解决了。

于 2012-12-05T08:48:51.043 回答
0

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

于 2020-02-28T20:15:35.533 回答