使用 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
sqlalchemy 无法连接到 ms sql server