26
2025
06
12:28:10

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

我有以下脚本连接到我的微软 azure 服务器。

 <?phptry {    $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
    DOPDO support => enabledPDO 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

任何建议,将不胜感激。




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

通过 PDO ODBC 将 PHP 连接到 MSSQL

结果我只需要更新我的 /etc/freetds/freetds.conf

我的改变:

取消注释 TDS 协议版本并更新。

 tds version = 8.0

在示例下方添加了 mssql。

 [mssql]
host =
Port = 1433

tds version = 8.0



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




推荐本站淘宝优惠价购买喜欢的宝贝:

image.png

本文链接:https://zblog.hqyman.cn/post/11939.html 非本站原创文章欢迎转载,原创文章需保留本站地址!

分享到:
打赏





休息一下~~


« 上一篇 下一篇 »

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

请先 登录 再评论,若不是会员请先 注册

您的IP地址是: