使用PDO_DBLIB连接到MS SQL数据库的PHP错误

时间:2011-08-18 02:25:28

标签: php sql-server sql-server-2008 pdo

我正在尝试使用PHP的PDO_DBLIB驱动程序连接到远程数据库并遇到一些问题。

使用telnet和SQL客户端可以通过相同的环境连接数据库。但是,在PHP中使用以下代码进行连接不起作用:

<?php
$conn = new PDO('dblib:dbname=TestDB;host=RemoteServer;charset=utf8', 'my_user', 'my_pass');

运行此代码,无论是来自命令行还是Apache,都会产生以下错误:

  

致命错误:未捕获异常'PDOException',消息'SQLSTATE [HY000]无法连接:Adaptive Server不可用或不存在(严重级9)'

我能够使用不同Web服务器上的相同代码连接到数据库,这让我相信这是一个配置问题。两台服务器上的php.ini文件看起来相对相同。它们各自具有相同的PDO库,并且配置了相同的选项。

有谁知道为什么会发生这种情况?

2 个答案:

答案 0 :(得分:16)

事实证明这是一个比我想象的要简单得多的问题。无论出于何种原因,开发服务器没有使用端口1433作为连接中的默认端口,而是使用端口4000。

我通过启用freetds.conf文件中的日志并在我发出请求时监视它们来发现这一点。

另外,需要注意的事项:DBLIB扩展使用冒号(:)作为主机和端口之间的分隔符而不是逗号。不幸的是,使用逗号时收到的错误不是很具描述性,所以希望有人从这个发现中受益。

答案 1 :(得分:3)

直接为此主机写入 freetds.conf 端口:

[RemoteServer]
    host = RemoteServer
    port = 1433

离开php-code us:

$conn = new PDO('dblib:dbname=TestDB;host=RemoteServer;charset=utf8', 'my_user', 'my_pass');