PHP/PDO 错误:SQLSTATE[HY000] 无法连接:Adaptive Server 不可用或不存在(严重性 9)

Posted

技术标签:

【中文标题】PHP/PDO 错误:SQLSTATE[HY000] 无法连接:Adaptive Server 不可用或不存在(严重性 9)【英文标题】:PHP/PDO Error: SQLSTATE[HY000] Unable to connect: Adaptive Server is unavailable or does not exist (severity 9) 【发布时间】:2015-10-27 10:08:07 【问题描述】:

我在 CentOS 6 上运行 php 5.5,试图通过 PDO 连接到 MS SQL Server 数据库。我已经搜索了大约 20 个对同一错误消息的不同答案,并在 SO 上尝试了其中的每一个。当我尝试从 PDO 连接时,出现以下错误:

SQLSTATE[HY000] 无法连接:Adaptive Server 不可用或不存在(严重性 9)

我可以在命令行上通过 FreeTDS 进行连接,完全没有问题

TDSVER=7.0 tsql -H 192.168.5.57 -p 1433 -U testuser

我尝试在freetds.conf 中设置tds version = 7.0,但仍然出现同样的错误。

我尝试连接到不同的 MS SQL Server 并且每次都得到相同的结果。我已经在 Rackspace Cloud 服务器上尝试了相同的代码,没有任何问题。因此,PDO/PHP 和 FreeTDS 之间的某些内容似乎没有正确表达,但我不知道如何追踪它。

try 
  $hostname = '192.168.5.57:1433';
  $dbname = 'Test';
  $username = 'testuser';
  $password = 'thisismypassword';
  $db = new PDO("dblib:host=$hostname;dbname=$dbname","$username","$password");
 catch (PDOException $e) 
  echo 'Failed to get DB handle: ' . $e->getMessage();

【问题讨论】:

天哪。祝你好运 MSSQL 与任何 Linux 连接器/驱动程序接口...我们最终设置了一个 Windows 服务器,以便我们可以使用本机 SQL 驱动程序...然后用 PHP 编写一个 API,以便我们可以从任何应用程序与服务器通信/服务器受 pub/priv 密钥保护。 @HalfCrazed 我们让它在 Rackspace 的生产环境中运行良好。我只是想设置一个新的开发环境,但无法让它工作。 您的问题解决了吗?我也遇到了同样的问题,这里有几个帖子针对同一个问题,但对我来说没有有效的答案.. 看这里***.com/questions/37205752/…,然后看这里***.com/questions/20163776/… - 这对我有帮助。基本上我会考虑将 tds 版本设置为 8.0 以及设置参数并根据需要安装 odbc。但请查看这些链接以获取有关这方面的更多信息。 【参考方案1】:

尝试从$hostname 中删除端口并将其添加到freetds.conf。

[192.168.5.57]
    host = 192.168.5.57
    port = 1433

【讨论】:

【参考方案2】:

我们在尝试连接到未经授权的数据库时遇到此错误。一旦我们请求加入白名单(不确定是在防火墙还是数据库级别),我们就可以正常连接了。

检查是否有 IP 地址限制。

【讨论】:

【参考方案3】:

根据PHP.net更正你的连接DSN

"sqlsrv:Server=localhost;Database=testdb"

【讨论】:

如果有人在使用 dblib,那么 sqlsrv 驱动程序由于某种原因无法工作,例如在最新的 Debian 9 下。

以上是关于PHP/PDO 错误:SQLSTATE[HY000] 无法连接:Adaptive Server 不可用或不存在(严重性 9)的主要内容,如果未能解决你的问题,请参考以下文章

Zend 错误 SQLSTATE[HY000] [1045]

SQLSTATE[HY000]:一般错误:1364 字段

SQLSTATE [HY000]:一般错误:1364 字段“名称”没有默认值

Symfony 2 SQLSTATE [HY000] [2002] 连接被拒绝错误

SQLSTATE [HY000]:一般错误:1364 字段“标题”没有默认值

SQLSTATE [HY000]:一般错误:2053