我正在嘗試連接到我在 Linux VM 上託管的 SQL Server 資料庫。我在我的開發 Windows 機器上運行 xampp,連接來自我正在建立的 php 網站。我想我需要使用 sqlsrv
來連線。我從https://learn.microsoft.com/en-us/sql/connect/php/download-drivers-php-sql-server?view= 下載了dll sql-server-ver15&viewFallbackFrom=sql-server-2019
我已將必要的 dll 檔案移至我的 xamppphpetc
目錄。我還驗證了 php.ini 檔案中的擴充目錄是 extension_dir="C:xamppphpext"
以下內容已新增至 php.ini 的 Dynamic Extensions
部分:
extension=php_sqlsrv_81_ts_x86.dll extension=php_pdo_sqlsrv_81_ts_x86.dll extension=php8ts.dll
我在網路上找到了有關刪除php_
前綴、刪除.dll
後綴、使用ts 或非ts、將所有檔案移到擴充目錄、僅將上面列出的幾個檔案移動到目錄中的信息,不包括php8ts。 dll
等。我已經嘗試了上面的每一個配置,無論是邏輯的還是不邏輯的。
這是我的網站的範例連接程式碼:
$conn = new PDO('sqlsrv:Server=my_server_ip\MSSQLSERVER;Database=dbname', 'username', 'password'); if ($conn === false) { echo "Error (sqlsrv_connect): ".print_r(sqlsrv_errors(), true); exit; } else { echo "success"; }
我嘗試了多個不同的連接範例。透過上面的操作,我收到此錯誤:
致命錯誤:未捕獲的PDOException:在C:xampphtdocssiteindex.php:123 中找不到驅動程式堆疊追蹤:#0 C:xampphtdocssiteindex.php(123): PDO ->__construct('sqlsrv:Server= my_server_ip', 'username', 'password') #1 {main} 在第123 行的C:xampphtdocssiteindex.php 中拋出
從這裡我邏輯上認為好吧,讓我們透過回顯來檢查 phpinfo();
。清單中的任何位置都沒有列出 sqlsrv
或 PDO 變體的任何內容。即使在sqlsrv的頁面上ctrl f,也只能發現上面的錯誤。
我已驗證已安裝 ODBC 驅動程式。
我嘗試過的其他事情是使用 sqlsrv_connect
而不是 PDO。我發現與我的 php 版本(8.1)相關的資訊有衝突,但我想無論如何還是要嘗試一下。但是,當我遇到該變體時,我得到:
致命錯誤:呼叫未定義的函數 sqlsrv_connect()
對我來說,很明顯我的 .dll 沒有被識別或類似的東西。然而我一生都無法理解為什麼。我已經驗證所有內容都以管理員身份運行,多次重新啟動 xampp,刪除/重新下載 dll 等。
誰能指出我可能沒有想到的任何明顯問題?
P粉7980104412023-11-10 19:58:28
已解決。有兩個問題。
我的 Xampp 安裝已損壞。它無法識別我在頁面上使用 echo phpinfo();
時注意到的任何新 DLL。
出於某種原因,ini 檔案配置嘗試使用 x86 dll 而不是 x64,即使擴充功能在 ini 中編寫為 x64 也是如此。
解決步驟:
我再次使用預設設定重新安裝並重新配置了 Xampp,現在可以識別 dll。
我從 Xampp 的擴充目錄中刪除了 x86 dll。
最終的 php.ini 是這樣的:
extension=php_sqlsrv_81_ts_x64.dll extension=php_pdo_sqlsrv_81_ts_x64.dll extension=php8ts.dll extension=php_pdo_odbc.dll extension=php_pdo.dll
使用最終的 .dll 可能是多餘的,但它仍然可以按預期工作。確保驗證 sqlsrv 或 pdo_sqlsrv 的正確版本,因為可能會出現與您的 php 版本的相容性問題。