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

use*_*936 10 php sql-server pdo sql-server-2008

我试图使用PHP的PDO_DBLIB驱动程序连接到远程数据库,并遇到一些问题.

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

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

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

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

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

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

use*_*936 16

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

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

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