首頁  >  問答  >  主體

XAMPP/SQLSRV:無法在 PHPINFO() 中找到 Sqlsrv; - 來自連線的錯誤

我正在嘗試連接到我在 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粉201448898P粉201448898368 天前678

全部回覆(1)我來回復

  • P粉798010441

    P粉7980104412023-11-10 19:58:28

    已解決。有兩個問題。

    1. 我的 Xampp 安裝已損壞。它無法識別我在頁面上使用 echo phpinfo(); 時注意到的任何新 DLL。

    2. 出於某種原因,ini 檔案配置嘗試使用 x86 dll 而不是 x64,即使擴充功能在 ini 中編寫為 x64 也是如此。

    解決步驟:

    1. 我再次使用預設設定重新安裝並重新配置了 Xampp,現在可以識別 dll。

    2. 我從 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 版本的相容性問題。

    回覆
    0
  • 取消回覆