DBALでトランザクションを実行する方法がよくわかりません
行のIDに応じて列を更新する次のスクリプトを実行しています。テーブルに存在しない偽のIDを入力しましたが(したがって、更新を実行できなくなります)、トランザクションであるにもかかわらず、最初の更新がコミットされます。いずれかのトランザクションが失敗すると、すべてのトランザクションが失敗することを期待しています。
$conn -> beginTransaction();
try{
$try = $conn->prepare("update table set column = '123' where id = 0"); //column exists
$try->execute();
$try = $conn->prepare("update table set column = '123' where id = 1"); //column exists
$try->execute();
$try = $conn->prepare("update table set column = '123' where id = 120"); //column does not exists
$try->execute();
$try = $conn->commit();
}
catch(Exception $e) {
$try = $conn->rollback();
throw $e;
}
期待される結果、id = 120の行が存在しないため、更新はありません実際の結果、存在しない行を除くすべての行が更新されます。
事前にお詫び申し上げますが、オブジェクト指向プログラミングはまだ南極大陸です。