IIS 上的 MSSQL 和 PHP 5.3.5 之间的连接不起作用

Posted

技术标签:

【中文标题】IIS 上的 MSSQL 和 PHP 5.3.5 之间的连接不起作用【英文标题】:Connection between MSSQL and PHP 5.3.5 on IIS is not working 【发布时间】:2011-03-24 20:47:35 【问题描述】:

我最近安装了 IIS、php 5.3.5 和 mysql,并且一切正常。

然后我也需要 MS SQL,而我认为这将是一件容易的事,现在让我发疯了,我不知道如何使它工作。

根据php_info(),MS SQL 驱动程序没有加载。

我下载了php_mssql.dll 并在php.ini 中启用了它,但它不起作用。我发现新版本的 PHP 使用了不同的 dll。所以我下载了新的,把它放在 ext 文件夹中,并更新了php.ini,但还是不行。

php_info() 仍然没有显示驱动程序已加载。

我即将卸载IIS和PHP,并安装我之前安装的Apache。

这个问题是我最后一次尝试,有人可以帮忙吗?

【问题讨论】:

仅仅抓取 DLL 文件是不够的——你是否还要修改 php.ini 来加载它们? 是的,我修改了 php.ini 文件并重新启动了 IIS。我尝试了 php_mssql.php 和 php_sqlsrv_53_nts_vc9.dll。 您是否修改了正确的php.ini 文件?它应该在phpinfo 页面中列出正确的文件名。 我假设您使用的是 FastCGI,对吧? IIS 在重新启动期间是否会关闭外部 FastCGI 位?我在这里抓住了稻草...... Ops...我正在使用 FastCGI,我尝试重新启动 IIS 并停止并重新启动,以及重新启动计算机。 【参考方案1】:

这是我不久前写的客户常见问题解答中的一个 sn-p,以帮助我们的专用托管客户启动 PHP 并使用 MS SQL 驱动程序运行。它可能会复制上面 cmets 中已经传授的一些知识,但它的完整性也可以帮助其他人从头开始:

注意:很明显,自从我写这篇文章以来,PHP 版本号已经发生了一些变化,但一般原则仍然适用。


安装先决条件: Microsoft Drivers for PHP for SQL Server 需要 SQL Native Client:

Microsoft SQL Server 2008 R2 Native Client X64 - for 64 bit Windows 或Microsoft SQL Server 2008 R2 Native Client X32 - for 32 bit Windows

下载并安装与您的系统匹配的 Native Client 驱动程序。

PHP MS SQL 驱动程序:

下载 Microsoft Drivers for PHP for SQL Server:

Microsoft Drivers for PHP for SQL Server

该文件是一个自解压的可执行文件,因此只需使用 7zip 或 WinRAR 并将文件解压到您选择的文件夹中。我们现在需要决定选择哪个驱动程序来匹配您的 PHP 安装。

PHP 5.3.5 有四种不同的风格:

PHP 5.3.5 非线程安全 VC9 PHP 5.3.5 非线程安全 VC6 PHP 5.3.5 线程安全 VC9 PHP 5.3.5 线程安全 VC6

要知道您安装了哪个版本,请打开与php.exephp-cgi.exe 等位于同一文件夹中的snapshot.txt 文件。不要使用notepad.exe,因为该文件仅使用换行符(\n ) 用于开头的行结束(unix 格式),记事本将这些修改为一行。

在文件中,您将看到一行(在第 6 行附近,或在您使用记事本的第 1 行中间附近)开头:Build::

构建:D:\php-sdk\snap_5_3\vc9\x86\obj\Release - 非线程安全,VC9 构建 构建:D:\php-sdk\snap_5_3\vc6\x86\obj\Release - 非线程安全,VC6 构建 构建:D:\php-sdk\snap_5_3\vc9\x86\obj\Release_TS - 线程安全,VC9 构建 构建:D:\php-sdk\snap_5_3\vc6\x86\obj\Release_TS - 线程安全,VC6 构建

这告诉我们您正在运行的 PHP 版本。

从您提取 MS SQL PHP 驱动程序的文件夹中,选择与正在使用的 PHP 版本匹配的驱动程序(如果您不使用 PDO,则无需复制 php_pdo_ 驱动程序) :

PHP 5.3.5 非线程安全 VC9:php_sqlsrv_53_nts_vc9.dll、php_pdo_sqlsrv_53_nts_vc9.dll PHP 5.3.5 非线程安全 VC6:php_sqlsrv_53_nts_vc6.dll、php_pdo_sqlsrv_53_nts_vc6.dll PHP 5.3.5 线程安全 VC9:php_sqlsrv_53_ts_vc9.dll、php_pdo_sqlsrv_53_ts_vc9.dll PHP 5.3.5 线程安全 VC6:php_sqlsrv_53_ts_vc6.dll、php_pdo_sqlsrv_53_ts_vc6.dll

假设您的 PHP 安装在 C:\PHP 中,请将这些文件复制(不要移动)到您的 C:\PHP\EXT 文件夹中。

打开C:\PHP\PHP.INI并找到文件的Dynamic Extensions部分并添加:

扩展=php_sqlsrv_53_nts_vc9.dll extension=php_pdo_sqlsrv_53_nts_vc9.dll

最后,为了确保 PHP 可以找到这些扩展,请确保 C:\PHP\PHP.INI 中的 extension_dir 指令设置为 C:\PHP\EXT

extension_dir = C:\PHP\ext

重启 IIS 并调用phpinfo()。如果一切顺利,您应该会看到:

如果您还加载了 PDO 驱动程序,您应该会看到:

【讨论】:

太棒了,谢谢。这是否意味着 mssql_ 函数不再可用?? @Naner - 谢谢:)。是的,您需要改用 sqlsrv_ 函数,它几乎映射到 mssql_ 函数,但有一些区别:msdn.microsoft.com/en-us/library/cc296152.aspx 我应该如何在 linux 上设置这个 sqlsrv 驱动程序?请在下面的链接中找到我的答案,请给我必要的建议。***.com/questions/11839368/… @KusH - 上述驱动程序仅适用于 Windows。老实说,我从来没有在 Unix 上从 PHP 访问 MS SQL 的用例。你可以看看:***.com/questions/3684782/… 看看是否有帮助。 @hotohoto 没试过,但我猜是这样。问题往往在于 PHP 驱动程序落后于 PHP 版本。【参考方案2】:

以上提到的:

extension=php_sqlsrv_53_nts_vc9.dll extension=php_pdo_sqlsrv_53_nts_vc9.dll

我发现的不正确。

因此,很可能是:

extension=php_sqlsrv_53_ts_vc9.dll
extension=php_pdo_sqlsrv_53_ts_vc9.dll

【讨论】:

以上是关于IIS 上的 MSSQL 和 PHP 5.3.5 之间的连接不起作用的主要内容,如果未能解决你的问题,请参考以下文章

MSSQL 错误“底层提供程序在打开时失败”IIS 部署

php连接MSSQL

通过 *** 将 PHP 应用程序连接到 MSSQL 时应该考虑啥?

通过 SSL 上的 PHP PDO 连接到 MSSQL 服务器

PHP-IIS 上的 DOCUMENT ROOT 变量

我的 3 层网站使用 cUrl 一直冻结