PDO错误" Adaptive Server不可用"连接到MS SQL数据库时

时间:2015-07-01 13:19:14

标签: php sql-server database pdo

我正在尝试连接到在Windows服务器上运行的SQL Server数据库。我在linux服务器上运行这个PHP代码(centos 7)。

我使用以下pdo连接字符串连接到数据库。

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

当我运行代码时,我得到以下异常。 ' PDOException' with message' SQLSTATE [HY000]无法连接:Adaptive Server不可用或不存在(严重级9)'

我尝试使用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

5 个答案:

答案 0 :(得分:3)

您拥有数据源名称,您应该使用它:

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

你正在运行linux吗?我建议给odbc一个镜头。

答案 1 :(得分:0)

要检查的三件事。

首先使用您定义的端口尝试连接。

而不是:

$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 docs找到的一件事。在评论中,另一个提到了同样的错误。这个答案似乎有效:

  

对于PDO MSSQL连接问题,请确保您拥有ntwdblib.dll的更新版本(截至此帖子目前为8.00.194)。覆盖现有(旧)文件或将其放在Windows system32文件夹中。 PHP 5.2.X附带的版本不起作用。这显然是一个众所周知的问题,但在我能够锁定文件名之前,我很难找到有关此问题的信息。我希望这有助于某人。

另一个可能的问题可能是SELinux,如果它已启用。我在Ruby on Rails安装上遇到了一些熟悉的错误。您可以通过禁用SELinux尝试再试一次。

答案 2 :(得分:0)

使用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');

答案 3 :(得分:0)

对我来说,问题出在使用IP地址。 我将其更改为“ MyServerName / SQL2017DEV”并已连接

答案 4 :(得分:-2)

我已经看到了同样的问题。我很简单地解决了这个问题。 打开MSSQLsrver 1433端口 然后你可以连接数据库成功。