私はかなり新しいトランザクションです。PHP、MySQL、PDOトランザクション - tryブロック内のコードはcommit()で停止しますか?
前に、私が何をやっていたようなものだった:
$db = new PDO(...);
$stmt = $db->prepare(...);
if($stmt->execute()){
// success
return true;
}else{
// failed
return false;
}
しかし、単一のトランザクションにグループの複数のクエリへの試みで、ブロック1
コード、私は今のようなものを使用しています:
コードブロック2
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$db->beginTransaction();
try{
$stmt = $db->prepare(... 1 ...);
$stmt->execute();
$stmt = $db->prepare(... 2 ...);
$stmt->execute();
$stmt = $db->prepare(... 3 ...);
$stmt->execute();
$db->commit();
return true;
}catch(Exception $e){
// Failed, maybe write the error to a txt file or something
$db->rollBack();
return false;
}
私の質問は:取引が何らかの理由で失敗した場合、コードは$db->commit();
に止まり、catch
ブロックにジャンプしますか?またはreturn true;
が最初に実行され、catch
に移動しようとしますか?もしそうなら、私はすでに戻ってきたので、catch
には行かないでしょう。それは間違った価値を返してしまったはずです。
コード・ブロック3
if($stmt->commit()){
return true;
}
か、それは十分な私はそれがコードブロック2に書かれている方法です。
は、私はまだのようなものを含める必要がありますか?
はい、コードが '$ db-> commit();'で止まったら 'catch 'ブロックの出力が返されますので、' if'のような条件を追加する必要はありません($ stmt-> commit()).... 'http://php.net/manual/en/pdo.transactions.php – pes502