MySQLサーバーからデータを取得するためにPDOを使用しています。私が気づいたのはこれです:MySQLサーバーが利用できない場合、このコードが例外を返すには実際に(比較的)時間がかかります:
try {
$handle = new PDO($db_type . ':Host='.$db_Host.';dbname='.$db_name,$db_user,$db_pass);
// Tried using PDO::setAttribute and PDO::ATTR_TIMEOUT here
} catch(PDOException $e) {
echo $e->getMessage;
}
MySQLの場合、例外の発生(SQLSTATE [HY000] [2003] MySQLサーバーに接続できません...)およびPostgreSQLで30秒(SQLSTATE [08006] [7]タイムアウトの期限切れ) )。
PDO :: setAttributeとPDO :: ATTR_TIMEOUTを使用してみましたが、機能しません。このステートメントの前に問題が発生するため、これは理にかなっていると思います。
DBへの接続のタイムアウトを設定する方法はありますか? PDOが何も存在しないことに気付くには、2分/ 30秒は本当に長いように思えます。
私はこれがどこかで行われているのを見たと思いますが、私の人生で再び見つけることはできません。
$DBH = new PDO(
"mysql:Host=$Host;dbname=$dbname",
$username,
$password,
array(
PDO::ATTR_TIMEOUT => 5, // in seconds
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION
)
);
私はPDOにDBLIBドライバーを使用していますが、オプションの受け渡しをサポートしていません(警告が表示されます)。
これを回避するには、connection_timeout
にあるFreeTDS構成ファイルの設定/etc/freetds/freetds.conf
(Ubuntuの場合)。