例コード:PHP PDO実行時にトランザクションのロールバックが失敗しますか?
$pdo->beginTransaction();
try {
$query1 = $pdo->prepare(...);
$query2 = $pdo->prepare(...);
$query1->execute();
$query2->execute();
$pdo->commit();
} catch(Exception $e){
try {
$pdo->rollBack();
} catch(Exception $re){
//...
}
//...
}
私は例外を投げることができる準備、および実行中のトランザクションがない場合に例外をスローしますコミット知っています。
しかし、準備が成功するが失敗するような状況が起こる可能性はありますか?ロールバックは発生しませんか?コミットは実行が失敗したときにもスローされます(私はそうは思わない、ドキュメンテーションはトランザクションがないときだけスローすると言う)。
だから私は明示的に実行結果を確認すると、次のようにロールバックを引き起こすことが私自身の例外を投げる?:
$pdo->beginTransaction();
try {
$query1 = $pdo->prepare(...);
$query2 = $pdo->prepare(...);
if(!$query1->execute()){
throw new Exception('Query1 failed to execute.');
}
if(!$query2->execute()){
throw new Exception('Query2 failed to execute.');
}
$pdo->commit();
} catch(Exception $e){
try {
$pdo->rollBack();
} catch(Exception $re){
//...
}
//...
}
あなたはPDOは、エラー – RiggsFolly
上の例外をスローするように設定している。しかし、基本的に、あなたは、コミットトランザクションが – RiggsFolly
PDO :: ROLLBACK(ロールバックする必要がありますを取得いけない場合)、それが開かれた前回せずにロールバックするために来るとき、 'PDOException'をスローしますトランザクション。 –