通过 PDO 连接到 SQL Server 2005

通过 PDO 连接到 SQL Server 2005

我已使用 Microsoft 的 Web Platform Installer 4.6 将我的 php 安装升级到 5.4.14。

除了我无法连接到数据库之外,Php 运行良好。

升级之前我的连接工作正常,但现在却无法工作。这是我的连接字符串,其中 1.1.1.1 是我的真实 IP 地址:

$db = new PDO("odbc:DRIVER={SQL Server};SERVER=1.1.1.1;DATABASE=TEST;charset=utf8", "TEST", "Password");

这会导致浏览器弹出一个显示“服务器错误”的页面,但我的错误日志仍为空。在我的 php.ini 文件中,有以下几行:

extension=php_pdo_sqlsrv.dll
extension=php_sqlsrv.dll
extension=php_sqlsrv_53_nts_vc6.dll

这些扩展未出现在我的 phpinfo.php 页面上。我的“extension_dir”变量已设置为正确的目录。

更新:现在我的错误日志正在填充(原因不明)并且我收到此错误:

PHP Warning:  PHP Startup: Unable to load dynamic library 'C:\Program Files\PHP\v5.4\ext\php_pdo_sqlsrv.dll' - The specified module could not be found.

答案1

我无法在 php 5.4.14 上建立 SQL 连接,但我能够降级到 5.3 并使其正常工作。在此过程中我学到了很多东西,我想在这里发帖以帮助后来者。

关于我的环境:Windows Server 2003 IIS 版本 6.0 SQL server 2005,位于另一台机器上。

安装 PHP 5.3.xx 的说明:1. 卸载任何您不使用的旧 php 版本。您可以同时安装多个 PHP 版本。

  1. 安装微软的 Web 平台安装程序 4.6。http://www.microsoft.com/web/downloads/platform.aspx

  2. 安装后,运行它并转到“应用程序”选项卡。-
    搜索“php”。-安装 PHP 版本 5.3.xx 和“IIS 中适用于 SQL 服务器的 Microsoft Drivers for PHPv5.3”

  3. 从以下网址下载“Microsoft Drivers 3.0 for PHP for SQL Server”SQLSRV20.EXEhttp://www.microsoft.com/en-us/download/details.aspx?id=20098。选择 SQLSRV20.EXE 包而不是 SQLSRV30.EXE 包非常重要。将 SQLSRV20.EXE 包“安装”到任意位置。您将在第五步中从此目录复制两个驱动程序。-注意:对于下载 SQLSRV30.EXE 以进行不同安装配置并收到错误“SQLSRV30.EXE 不是有效的 Win32 应用程序”的任何人,您可以使用 7-zip 并解压其内容来解决这个问题。(您可以将 .exe 视为存档。)

  4. 导航到您的 PHP 安装目录(在我的情况下为 C:\PHP\v5.3)。然后进入“ext”目录。-
    删除两个文件:“php_pdo_sqlsrv.dll”和“php_sqlsrv.dll”-从您安装 SQLSRV20.EXE 包的目录中复制这两个文件“php_pdo_sqlsrv_53_nts_vc9.dll”和“php_sqlsrv_53_nts_vc9.dll”。-
    注意:在驱动程序的文件名中,“nts”表示“非线程安全”,vc9 是用于编译驱动程序/php 的环境,“53”与正在使用的 php 版本相关(在本例中为 php 版本 5.3.whatevertheminorversionis)。您应该始终在 Windows 中安装非线程安全版本。Microsoft 的 Web 平台安装程序会为您完成此操作。

  5. 打开 php.ini 文件(位于 PHP 安装根目录中。在我的情况下,这是 C:\PHP\v5.3\php.ini)删除文件末尾附近的这两行:

    扩展=php_sqlsrv.dll

    扩展=php_pdo_sqlsrv.dll

    并添加以下两行:

    扩展=php_sqlsrv_53_nts_vc9.dll

    扩展=php_pdo_sqlsrv_53_nts_vc9.dll

  6. 在 IIS 中,将你的 php 应用程序添加到池中(如果尚未完成),请右键单击池并点击回收。你应该一切顺利!
    -你也可以尝试重新启动 IIS 管理服务

故障排除 我运行 phpinfo.php 页面的应用程序不在 php 应用程序池中。它在 ASP.net 应用程序池下运行。将我的 php 应用程序移至其自己的池并重新启动应用程序池后,SQL 驱动程序就会出现。

您可能需要配置 C:\WINDOWS\system32\inetsrv 中的 fcgiext.ini 文件。在类型部分下,您应该列出类似“php=PHP53_via_FastCGI”的内容,然后列出“[PHP53_via_FastCGI] ExePath=C:\Program Files\PHP\v5.3\php-cgi.exe”的内容

“php=PHP53_via_FastCGI” 应与 IIS 中所需的 PHP 安装相关。如果您有另一个“PHP54_via_FastCGI”部分,并且您想在页面上使用 PHP 5.4,那么您应该将此值更改为“php=PHP53_via_FastCGI”。

相关内容