web-dev-qa-db-ja.com

SQLSTATE [01002] Adaptive Server接続に失敗しました(重大度9)

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
hawx

さらにグーグル検索した後、私はこの答えに出くわしました。

Connect PHP PDO ODBCを介してMSSQLに

/etc/freetds/freetds.confを更新するだけでよいことがわかりました

私の変更:

コメントされていないTDSプロトコルバージョンと更新。

tds version = 8.0

例の下にmssqlを追加しました。

[mssql]
Host =
Port = 1433
tds version = 8.0
10
hawx

ここでも同じ問題が発生しましたが、FreeTDS 8.0のバージョンをPHP code:

<?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!";
3
Kannika

私の場合、私は$dbname、修正して問題を解決しました。

1
Robin Nemeth

私の場合、ユーザーのパスワードは知らないうちにリセットされていました。

0
grizzb

私の場合は、「pip install pymssql」を起動したときにインストールしたwhlパッケージがfreetds 1.00.97に搭載されていたためです。 freetds 1.1.6がインストールされているソースからパッケージを再構築するとうまくいき、サーバーに接続できました。

0
Gourgandine