【问题标题】:SQLSTATE[01002] Adaptive Server connection failed (severity 9)SQLSTATE[01002] Adaptive Server 连接失败(严重性 9)
【发布时间】:2016-09-09 09:35:43
【问题描述】:

我有以下脚本可以连接到我的 microsoft azure 服务器。

<?php

try {
    $hostname = "secrets.database.windows.net";
    $dbname = "secrets";
    $username = "secrets";
    $pw = "secrets";
    $dbh = new PDO ("dblib:host=$hostname;dbname=$dbname","$username","$pw");
} catch (PDOException $e) {
    echo "Failed to get DB handle: " . $e->getMessage() . "\n";
    exit;
}

echo "Passed!";

上面的脚本在我的旧服务器上传递,但在从新服务器执行时给我以下错误消息。

SQLSTATE[01002] Adaptive Server connection failed (severity 9)

我的新服务器 PHP 设置如下:

sudo apt-get install -y php5.6-fpm php5.6-ldap php5.6-curl php5.6-cli   php5.6-mcrypt php5.6-intl php5.6-json php5.6-pdo-dblib php5.6-mysqlnd php5.6-memcached php5.6-mbstring php5.6-imap php5.6-xml php5.6-sybase

到目前为止我的支票:

1) 两者都有相同的面向公众的 IP 地址。

2) 两者都有相同的 PHP PDO/ODBC 设置。

$ php -i | grep PDO
DO
PDO support => enabled
PDO drivers => dblib, mysql, odbc
PDO Driver for FreeTDS/Sybase DB-lib => enabled
PDO Driver for MySQL => enabled
PDO_ODBC
PDO Driver for ODBC (unixODBC) => enabled

3) 我可以使用 telnet 从两台服务器 ping 我的服务器:

telnet secrets.database.windows.net 1433

任何建议将不胜感激。

【问题讨论】:

    标签: php sql-server azure ubuntu pdo


    【解决方案1】:

    经过进一步的谷歌搜索,我发现了这个答案。

    Connect PHP to MSSQL via PDO ODBC

    原来我只需要更新我的 /etc/freetds/freetds.conf

    我的改变:

    未注释的 TDS 协议版本并已更新。

    tds version = 8.0
    

    在示例下方添加了 mssql。

    [mssql]
    host =
    Port = 1433
    tds version = 8.0
    

    【讨论】:

    • 我遇到了完全相同的问题。按照您提供的链接中的答案肯定会有所帮助。我唯一担心的是 tds 8.0 版实际上会退回到 tds 7.1 版,如此处所述freetds.org/userguide/choosingtdsprotocol.htm 但是它看起来仍然比我使用 7.2 时更稳定,这将给我临时的自适应服务器连接
    • 考虑到这一点,我也会继续将您的答案标记为正确。如果我亲自问过这个问题,你的答案将是适用的。
    【解决方案2】:

    我在这里遇到了同样的问题,但是通过直接在 PHP 代码中将 FreeTDS 8.0 版本添加到连接中来解决:

    <?php
    
    try {
        $hostname = "secrets.database.windows.net";
        $dbname = "secrets";
        $username = "secrets";
        $pw = "secrets";
        $dbh = new PDO ("dblib:version=8.0;charset=UTF-8;host={$hostname};dbname={$dbname}", $username, $pwd);
    } catch (PDOException $e) {
        echo "Failed to get DB handle: " . $e->getMessage() . "\n";
        exit;
    }
    
    echo "Passed!";
    

    【讨论】:

    • $pw = "secrets"; 应该是$pwd = "secrets";,这个错字使它只产生严重错误,而不管连接!
    【解决方案3】:

    在我的情况下,我在 $dbname 中有错字,更正它解决了问题。

    【讨论】:

      【解决方案4】:

      在我的情况下,用户的密码在我不知情的情况下被重置。

      【讨论】:

        【解决方案5】:

        在我的情况下,这是因为您在启动“pip install pymssql”时安装的 whl 软件包搭载了 freetds 1.00.97。 从安装了 freetds 1.1.6 的源代码重新构建包就可以了,并允许我连接到服务器。

        【讨论】:

          猜你喜欢
          • 2017-02-15
          • 2014-09-13
          • 2017-01-09
          • 2013-12-10
          • 2019-11-20
          • 2015-10-27
          • 2019-08-19
          • 2022-12-24
          • 2016-07-13
          相关资源
          最近更新 更多