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

Posted

技术标签:

【中文标题】使用 PDO_DBLIB 连接到 MS SQL 数据库的 PHP 错误【英文标题】:PHP error connecting to MS SQL database using PDO_DBLIB 【发布时间】:2011-10-29 10:12:55 【问题描述】:

我正在尝试使用 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 库,并配置了相同的选项。

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

【问题讨论】:

请不要编辑您的问题以说您解决了问题。选择您的答案作为下面接受的答案。 【参考方案1】:

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

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

另外,需要注意的是:DBLIB 扩展使用冒号 (:) 作为主机和端口之间的分隔符,而不是逗号。不幸的是,您在使用逗号时收到的错误描述性不强,因此希望有人能从这一发现中受益。

【讨论】:

【参考方案2】:

直接将此主机的端口写入freetds.conf

[RemoteServer]
    host = RemoteServer
    port = 1433

留下 php-code 我们是:

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

【讨论】:

以上是关于使用 PDO_DBLIB 连接到 MS SQL 数据库的 PHP 错误的主要内容,如果未能解决你的问题,请参考以下文章

使用 MS Access 2003 连接到 SQL Server 2005

无法使用 jdbc 连接到 MS SQL 数据库

sqlalchemy 无法连接到 ms sql server

MS-Access ODBC 连接到 Oracle for SQL

无法使用 pymssql 烧瓶连接到 ms sql 服务器

IBM Worklight 6.1 - 使用 SQL 适配器连接到 MS SQL 失败