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.exe
、php-cgi.exe
等位于同一文件夹中的snapshot.txt
文件。不要使用notepad.exe,因为该文件仅使用换行符(\n
) 用于开头的行结束(unix 格式),记事本将这些修改为一行。
在文件中,您将看到一行(在第 6 行附近,或在您使用记事本的第 1 行中间附近)开头:Build:
:
这告诉我们您正在运行的 PHP 版本。
从您提取 MS SQL PHP 驱动程序的文件夹中,选择与正在使用的 PHP 版本匹配的驱动程序(如果您不使用 PDO,则无需复制 php_pdo_
驱动程序) :
假设您的 PHP 安装在 C:\PHP
中,请将这些文件复制(不要移动)到您的 C:\PHP\EXT
文件夹中。
打开C:\PHP\PHP.INI
并找到文件的Dynamic Extensions
部分并添加:
最后,为了确保 PHP 可以找到这些扩展,请确保 C:\PHP\PHP.INI
中的 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 之间的连接不起作用的主要内容,如果未能解决你的问题,请参考以下文章
通过 *** 将 PHP 应用程序连接到 MSSQL 时应该考虑啥?