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
任意の提案をいただければ幸いです。
さらにグーグル検索した後、私はこの答えに出くわしました。
Connect PHP PDO ODBCを介してMSSQLに
/etc/freetds/freetds.confを更新するだけでよいことがわかりました
私の変更:
コメントされていないTDSプロトコルバージョンと更新。
tds version = 8.0
例の下にmssqlを追加しました。
[mssql]
Host =
Port = 1433
tds version = 8.0
ここでも同じ問題が発生しましたが、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!";
私の場合、私は$dbname
、修正して問題を解決しました。
私の場合、ユーザーのパスワードは知らないうちにリセットされていました。
私の場合は、「pip install pymssql」を起動したときにインストールしたwhlパッケージがfreetds 1.00.97に搭載されていたためです。 freetds 1.1.6がインストールされているソースからパッケージを再構築するとうまくいき、サーバーに接続できました。