簡體   English   中英

連接到 MS SQL 數據庫時出現 PDO 錯誤“Adaptive Server 不可用”

[英]PDO Error "Adaptive Server is unavailable" when connecting to MS SQL Database

我正在嘗試連接到在 Windows 服務器上運行的 SQL 服務器數據庫。 我在 linux 服務器(centos 7)上運行這個 PHP 代碼。

我正在使用以下 pdo 連接字符串連接到數據庫。

$db = new PDO ("dblib:192.168.2.1;dbname=TestDB","username",'pass');

當我運行代碼時,出現以下異常。 帶有消息“SQLSTATE[HY000] 無法連接:Adaptive Server 不可用或不存在(嚴重性 9)”的“PDOException”

我嘗試使用 tsql 測試連接,並且我能夠連接到數據庫而沒有任何錯誤。 以下代碼為我提供了 TestDB 中所有表的列表。 如果我沒有先鍵入使用 TestDB,它就行不通。

tsql -S 192.168.2.1 -U username -P 'pass' -L TestDB

use TestDB 
GO 
select * FROM sys.Tables 
GO

我的 freetds.conf 文件包含以下內容

[Server1]
    host = 192.168.2.1
    port = 1433
    tds version = 8.0

我無法弄清楚如何使用 tsql 進行連接,但在使用 php 連接時無法進行相同的操作。

dblib 驅動肯定已經安裝好了。

print_r(PDO::getAvailableDrivers()); 

Array ( [0] => dblib [1] => mysql [2] => sqlite )

回答

找到了問題的原因。 原來是SELinux。 以下命令修復了該問題。

setsebool -P httpd_can_network_connect 1

setsebool -P httpd_can_network_connect_db 1

您有數據源名稱,您應該使用它:

$db = new PDO ("dblib:host=Server1;dbname=TestDB","username",'pass');

你在運行 linux 對嗎? 我建議試一試 odbc。

為您檢查三件事。

首先使用您定義的端口嘗試連接。

代替:

$db = new PDO ("dblib:192.168.2.1;dbname=TestDB","username",'pass');

嘗試使用這個:

$db = new PDO("dblib:host=192.168.2.1:1433;dbname=TestDB","username",'pass');

其次,您應該確定您的 SQL Server 是否配置為在端口 1433 上偵聽。您可以使用 SQL Server 配置管理器進行檢查。

您可以檢查的第三件事(如果您在 Windows 上運行它)是我在PHP 文檔中找到的一件事。 在評論中,另一個人提到了同樣的錯誤。 這是似乎有效的答案:

對於 PDO MSSQL 連接問題,請確保您擁有 ntwdblib.dll 的更新版本(截至本文,當前為 8.00.194)。 覆蓋現有(舊)文件或將其放在 Windows system32 文件夾中。 PHP 5.2.X 附帶的版本不起作用。 這顯然是一個眾所周知的問題,但在我能夠鎖定文件名之前,我很難找到有關此問題的信息。 我希望這對某人有所幫助。

如果啟用了 SELinux,另一個可能的問題可能是 SELinux。 我在 Ruby on Rails 安裝中遇到了一些與此相似的錯誤。 您可以通過禁用 SELinux 來嘗試一下,然后再試一次。

使用 PDO 連接時,如果您省略host=它使用 Unix 域套接字,這可能會導致您的問題。 輸入host=將通過 TCP/IP 連接到數據庫。

因此,嘗試將您的代碼行更改為:

$db = new PDO ("dblib:host=192.168.2.1;dbname=TestDB","username",'pass');

或者還有端口:

$db = new PDO ("dblib:host=192.168.2.1:1433;dbname=TestDB","username",'pass');

對我來說,問題在於使用 IP 地址。 我將其更改為“MyServerName/SQL2017DEV”並連接

我已經看到了同樣的問題。我非常簡單地解決了這個問題。 打開您的MSSQLsrver 1433端口,然后您可以連接數據庫成功。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM