人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

以下のSELECTが実行時間10秒だった場合に、
5秒でタイムアウトさせたいと思ってます。

SQLite 関数のsqlite_busy_timeoutみたいな事をPDOで実行したいと
思っているのですが、うまく動きません。

該当のデータベースでロックが発生している場合に
SQLをwaitさせるのではなく、タイムアウトさせたいです。

$sql = "SELECT * FROM AAAAA";
$param = array();

$test = new PDO("mysql:dbname=DB_NAME;host=DB_HOST",$_SERVER['SCRIPT_NAME'],'');
$test->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);
$test->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE,PDO::FETCH_ASSOC);
$test->setAttribute(PDO::ATTR_TIMEOUT,5);

$st = $test->prepare($sql);

わかる方、いたら教えて下さい。

●質問者: hopefully
●カテゴリ:就職・転職 ウェブ制作
✍キーワード:MySQL SELECT SQL SQLite ST
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● pahoo
●60ポイント

ERRMODE_EXCEPTION を設定しているので、下記のように try?catch でエラーイベントをキャッチアップしたらいかがでしょう。

try{
 $sql = "SELECT * FROM AAAAA";
 $param = array();
 $test = new PDO("mysql:dbname=DB_NAME;host=DB_HOST",$_SERVER['SCRIPT_NAME'],'');
 $test->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);
 $test->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE,PDO::FETCH_ASSOC);
 $test->setAttribute(PDO::ATTR_TIMEOUT,5);
 $st = $test->prepare($sql);

} catch (PDOException $err) {
//--タイムアウトエラー処理を記述する
}
◎質問者からの返答

うまく動かないですね・・

うーーん・・


2 ● user2864
●10ポイント

MySQLなら、MySQL側にtimeoutパラメータがありますのでそちらの秒数を5秒にされるとよいのではないでしょうか。

MySQLへログインして、以下のコマンドをrootユーザで実行してみてください。

ただし、再起動すると変更情報は失われますのでMySQLの設定ファイル(my.cnf)にも明記しておいてください、

set global wait_timeout=5;

set global innodb_lock_wait_timeout=5;

set global interactive_timeout=5;

set global table_lock_wait_timeout=5;

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ