Php

通過 PDO 連接到 SQL Server 2005

  • May 9, 2014

我已經使用 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.

我無法在 php 5.4.14 上獲得 SQL 連接,但我能夠降級到 5.3 並使其正常工作。在此過程中我學到了很多東西,我想在這裡發帖以幫助後來的其他人。

關於我的環境:Windows Server 2003 IIS 6.0 SQL server 2005,位於另一台機器上。

安裝 PHP 5.3.xx 的說明: 1. 解除安裝您不使用的任何以前的 php 版本。您可以同時安裝多個 PHP 版本。

  1. 安裝 Microsoft 的 Web 平台安裝程序 4.6。http://www.microsoft.com/web/downloads/platform.aspx
  2. 安裝後,執行它並轉到“應用程序”選項卡。
  • 搜尋“php”。-安裝 PHP 版本 5.3.xx 和“Microsoft Drivers for PHPv5.3 for SQL server in IIS”
  1. 從http://www.microsoft.com/en-us/download/details.aspx?id=20098下載“Microsoft Drivers 3.0 for PHP for SQL Server”SQLSRV20.EXE 。選擇 SQLSRV20.EXE 包而不是 SQLSRV30.EXE 包非常重要。在任何地方“安裝”SQLSRV20.EXE 包。您將在第五步中從該目錄複製兩個驅動程序。-注意:對於為不同的安裝配置下載 SQLSRV30.EXE 並收到錯誤“SQLSRV30.EXE 不是有效的 Win32 應用程序”的任何人,您可以通過使用 7-zip 並解壓縮其內容來解決此問題。(您可以將 .exe 視為存檔。)
  2. 導航到您的 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 平台安裝程序會為您執行此操作。 6. 打開您的 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 7. 在 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”。

引用自:https://serverfault.com/questions/531869