2

升级到 PHP 5.4 并使用 CodeIgniter 的 PHP 框架后,我的应用程序拒绝连接到 SQL Server 2005 数据库。没有执行任何配置更改,并且我确保也安装了 PHP SQLSRV 驱动程序 (3.0.3)。来自 CI 的特定消息是“无法使用提供的设置连接到您的数据库服务器”。

切换回 PHP 5.3,一切正常。

为了确保在 PHP 5.4 上安装了 sqlsrv 驱动程序,我运行php -m并显示“sqlsrv”。phpinfo() 看起来也不错。

我无法获得有关 sqlsrv 如何/为什么不与新驱动程序连接的任何调试信息。有趣的是,如果我从MS 网站上这个有趣的驱动程序页面下载 sqlsrv-5.4-nts-snap.zip - 那么它就可以工作了!但是,它似乎使用的是 sqlsrv 2.0 驱动程序。

SQLSRV 是否适用于 PHP 5.4?

4

1 回答 1

2

最后调试这个问题 - 事实证明问题出在使用 TCP/IP 而不是共享内存/命名管道时的连接参数。我在 CodeIgniter 中的连接设置是:

$db['default']['hostname'] = 'localhost';

相当于:

$db = sqlsrv_connect("localhost", $config);

我编写了一个自定义页面,它使用正确的配置变量(用户名/密码/UTF-8/等)运行了这个 sqlsrv_connect。然后使用print_r( sqlsrv_errors());我遇到了以下问题:

[Microsoft][SQL Server Native Client 11.0]共享内存提供程序:找不到用于连接 SQL Server 2000 的共享内存 dll

奇怪!但我现在知道它与共享内存与 TCP/IP 有关。在浏览了“Microsoft Drivers for PHP for SQL Server”的文档(chm 文件)后,我发现要通过 TCP/IP(在本地机器上)连接,您需要使用(local), 1433服务器名称 - 其中 1433 是您使用的任何端口使用。

总结一下变化(CodeIgniter 特有,但也一般用于 sqlsrv_connect)。更改 /application/config/database.php:

$db['default']['hostname'] = 'localhost';

$db['default']['hostname'] = '(local), 1433';
于 2012-11-02T22:31:24.883 回答