SQLSTATE [01002] Adaptive Server连接失败(严重级9)

时间:2016-05-13 09:05:50

标签: php sql-server azure ubuntu pdo

我有以下脚本连接到我的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

任何建议都将不胜感激。

5 个答案:

答案 0 :(得分:8)

经过一些谷歌搜索后,我发现了这个答案。

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

答案 1 :(得分:3)

我在这里遇到了同样的问题,但是通过在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!";

答案 2 :(得分:1)

在我的情况下,我在$dbname中输了一个拼写错误,纠正它解决了这个问题。

答案 3 :(得分:0)

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

答案 4 :(得分:0)

在我的情况下,这是因为在freetds 1.00.97上启动“ pip install pymssql”时安装的whl软件包。 从安装了freetds 1.1.6的源中重建软件包可以解决问题,并允许我连接到服务器。