topic: db (PDO / SQL / マルチDB) / ch08 — トランザクション / 演習 01
📝 ドリル 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
採点
php scripts/grade.php topics/11-db/ch08-transactions/drill/01-commit-success/
ヒント
$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 で出力
テストケース
期待される出力
commit
10: 1000
11: 2000
📄 starter.php(雛形)
このコードから書き始めてください。
<?php
$pdo = new PDO('sqlite:' . getenv('DOJO_DB_PATH'));
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
// TODO: beginTransaction でトランザクションを開始する
// TODO: (id=10, balance=1000) と (id=11, balance=2000) を INSERT する
// TODO: commit で確定する
// TODO: "commit" と出力する
// TODO: id 昇順で全件を "{id}: {balance}" の形式で出力する
✅ 解答例を見る(自分で解いてから)
<?php
$pdo = new PDO('sqlite:' . getenv('DOJO_DB_PATH'));
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$pdo->beginTransaction();
$pdo->exec("INSERT INTO accounts (id, balance) VALUES (10, 1000)");
$pdo->exec("INSERT INTO accounts (id, balance) VALUES (11, 2000)");
$pdo->commit();
echo "commit\n";
foreach ($pdo->query("SELECT id, balance FROM accounts ORDER BY id") as $row) {
echo "{$row['id']}: {$row['balance']}\n";
}