【问题标题】:PHP error connecting to MS SQL database using PDO_DBLIB使用 PDO_DBLIB 连接到 MS SQL 数据库的 PHP 错误
【发布时间】: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 库,并配置了相同的选项。

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

【问题讨论】:

  • 请不要编辑您的问题以说您解决了问题。选择您的答案作为下面接受的答案。

标签: php sql-server sql-server-2008 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');
    

    【讨论】:

      猜你喜欢
      • 2016-11-18
      • 2017-04-01
      • 1970-01-01
      • 2013-07-17
      • 2016-12-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多