私はPDOトランザクションに不慣れで、次のシナリオがあります。2つの別々のテーブルから削除したいのですが、どちらかの削除が失敗した場合、どちらも発生しないという規定があります。これは、トランザクションにとって理想的なシナリオのようです。私は次のことを試しました:
$db->beginTransaction();
try {
$db->exec( "DELETE FROM table1 WHERE galleryid = '$gallery_id' AND userid = '1'" );
$db->exec( "DELETE FROM table2 WHERE galleryid = '$gallery_id'" );
$db->commit();
} catch( PDOException $e ) {
$db->rollBack();
echo $e->getMessage();
}
最初の削除クエリで、真ではないものをクエリしました(つまり、user_idが1に等しいインスタンスはtable1にありません)。それにもかかわらず、2回目の削除が行われます。これは予想される動作である可能性があり、私はこれを適切にテストしていません。
では、両方の削除が通過するか、どちらも通過しないようなトランザクションを使用して、これを正しく書き込むにはどうすればよいでしょうか。