web-dev-qa-db-ja.com

PDOで接続タイムアウトを設定する

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秒は本当に長いように思えます。

私はこれがどこかで行われているのを見たと思いますが、私の人生で再び見つけることはできません。

24
gkres
$DBH = new PDO(
    "mysql:Host=$Host;dbname=$dbname", 
    $username, 
    $password,
    array(
        PDO::ATTR_TIMEOUT => 5, // in seconds
        PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION
    )
);
62
Shinto Joseph

私はPDOにDBLIBドライバーを使用していますが、オプションの受け渡しをサポートしていません(警告が表示されます)。

これを回避するには、connection_timeoutにあるFreeTDS構成ファイルの設定/etc/freetds/freetds.conf(Ubuntuの場合)。

7
gbuckingham89