第9章 データベース連携 / 第1回 模擬試験

PHPのデータベーストランザクションに関する次の記述のうち、正しいものはどれか。

トランザクションは、複数のSQL操作を1つの論理的な単位として扱う。
`beginTransaction()`でトランザクションを開始し、`commit()`で変更を確定する。
`rollBack()`で、トランザクション開始前の状態に戻すことができる。
上記すべて 正解
解説
3つの記述はすべて正しいです。 ・トランザクションは、関連する複数のSQL操作(例: 在庫を減らす処理と注文レコードを作る処理)を1つの不可分な単位として扱う仕組みです。途中で失敗した場合、すべてなかったことにできます。 ・`beginTransaction()`でトランザクションを開始し、一連の処理が成功したら`commit()`で変更を確定します。 ・処理の途中でエラーが発生した場合は`rollBack()`を呼ぶことで、`beginTransaction()`を実行する前の状態に戻せます。 例: ``` try { $pdo->beginTransaction(); $pdo->exec('UPDATE accounts SET balance = balance - 1000 WHERE id = 1'); $pdo->exec('UPDATE accounts SET balance = balance + 1000 WHERE id = 2'); $pdo->commit(); } catch (Throwable $e) { $pdo->rollBack(); throw $e; } ``` 送金処理のように「両方成功するか、両方失敗するか」のいずれかにしたい処理では、トランザクションでの一括制御が欠かせません。 (参照: 独習PHP 第4版 第9章 データベース連携 9.8節 トランザクション処理 p.465〜467)