topic: db (PDO / SQL / マルチDB) / ch06 — UPDATE と DELETE / 演習 02

📝 ドリル 02 — DELETE + rowCount

問題

users テーブルから age >= 25 の行を全部削除してから、

  1. "削除した件数: {n}" の形で rowCount() の値を出す
  2. 続いて、残った行を id 昇順で "{id}: {name} ({age})" 形式で出す

初期データ:

1: 太郎 (20)
2: 花子 (25)
3: 次郎 (30)
4: 三郎 (40)

age >= 25 に該当するのは 3 行 (花子・次郎・三郎)。

期待される出力:

削除した件数: 3
1: 太郎 (20)

採点

php scripts/grade.php topics/11-db/ch06-update-delete/drill/02-delete-with-rowcount/

ヒント

  • $pdo->prepare("DELETE FROM users WHERE age >= ?") を使う
  • $stmt->execute([25]) で値を渡す
  • $stmt->rowCount() で削除件数を取得
  • 続けて SELECT で残った行を foreach で出力

テストケース

期待される出力

削除した件数: 3
1: 太郎 (20)

📄 starter.php(雛形)

このコードから書き始めてください。

<?php

$pdo = new PDO('sqlite:' . getenv('DOJO_DB_PATH'));
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

// TODO: age >= 25 の行を DELETE する

// TODO: "削除した件数: {n}" の形で rowCount() を出力する

// TODO: 残った行を id 昇順で "{id}: {name} ({age})" の形式で出力する
✅ 解答例を見る(自分で解いてから)
<?php

$pdo = new PDO('sqlite:' . getenv('DOJO_DB_PATH'));
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

$stmt = $pdo->prepare("DELETE FROM users WHERE age >= ?");
$stmt->execute([25]);

echo "削除した件数: " . $stmt->rowCount() . "\n";

foreach ($pdo->query("SELECT id, name, age FROM users ORDER BY id") as $row) {
    echo "{$row['id']}: {$row['name']} ({$row['age']})\n";
}