ch08 — トランザクション
スライドで見るこの章を AI と学ぶ
演習問題の詳細
この章の演習問題の内容を読めます。実際に手元で解くには教材リポジトリを clone してください。
ドリル 01 — 2 件 INSERT を commit
問題
accounts テーブルに次の 2 件を 1 つのトランザクションで INSERT してから commit し、
最後に "commit" と出力し、続けて id 昇順で "{id}: {balance}" を全件出してください。
追加する 2 件:
id = 10, balance = 1000id = 11, balance = 2000
初期データは空 (テーブルだけある状態)。
期待される出力:
commit
10: 1000
11: 2000
ヒント
$pdo->beginTransaction();でトランザクション開始$pdo->exec("INSERT INTO accounts (id, balance) VALUES (10, 1000)");を 2 回$pdo->commit();で確定echo "commit\n";を出す- 最後に
SELECT id, balance FROM accounts ORDER BY idを foreach で出力
🧪 ブラウザで試す
スライドのコードを写経して ▶ 実行、自分で書いて 📝 採点 で答え合わせ。初回のみ PHP ランタイム読込で数秒かかります。
PHP ランタイム未読込
ドリル 02 — エラーで rollBack
問題
accounts テーブルに 2 件 INSERT しようとして、2 件目で意図的に失敗 させ、
rollBack で全部巻き戻したい。最後に SELECT したとき何も追加されていないことを示す。
INSERT 内容:
- 1 件目:
id = 10, balance = 1000→ 成功するはず - 2 件目:
id = 10, balance = 2000→ PK 重複 で例外発生
try ... catch (PDOException $e) で例外を捕まえて rollBack を呼び、
そのとき "rollback" と出力してください。
その後、SELECT で残った行を id 昇順で "{id}: {balance}" 形式で出す。
初期データは空。 rollBack されたので 1 件目も取り消され、SELECT は 0 件。
期待される出力:
rollback
ヒント
$pdo->beginTransaction();で開始try { ... $pdo->commit(); } catch (PDOException $e) { $pdo->rollBack(); echo "rollback\n"; }- 2 件目の INSERT で同じ
id = 10を入れれば PK 重複で例外 - catch を抜けた後に SELECT で残りを foreach 出力 (0 件なので何も出ない)
🧪 ブラウザで試す
スライドのコードを写経して ▶ 実行、自分で書いて 📝 採点 で答え合わせ。初回のみ PHP ランタイム読込で数秒かかります。
PHP ランタイム未読込
演習問題(2問)
サイト内で問題文・雛形・解答例を確認できます。実際に手元で解くには教材リポジトリを clone してください。
完了にすると進捗に反映されます