topic: db (PDO / SQL / マルチDB) / ch04 — WHERE / プレースホルダ / prepare + execute / 演習 02

📝 ドリル 02 — `age >= ?` で 25 以上の人を出力

問題

users テーブル (id, name, age) には次の 3 行が入っています。

id name age
1 太郎 20
2 花子 25
3 次郎 30

age が 25 以上の人の名前id 昇順で 1 行ずつ出力してください。

期待される出力:

花子
次郎

必須ルール

  • 値を SQL に 文字列連結してはいけません
  • ? プレースホルダ + prepare() + execute() を使うこと

採点

php scripts/grade.php topics/11-db/ch04-select-where/drill/02-where-greater/

ヒント

$stmt = $pdo->prepare('SELECT name FROM users WHERE age >= ? ORDER BY id');
$stmt->execute([25]);
▶ 3v4l で実行

テストケース

期待される出力

花子
次郎

📄 starter.php(雛形)

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

<?php

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

// TODO: age >= 25 の人の name を id 昇順で出力する
//   ヒント:
//     $stmt = $pdo->prepare('SELECT name FROM users WHERE age >= ? ORDER BY id');
//     $stmt->execute([25]);
//     foreach ($stmt->fetchAll(PDO::FETCH_ASSOC) as $row) { echo $row['name'] . "\n"; }
//
// ⚠ 文字列連結 ("WHERE age >= $x" など) で書かないこと。必ず ? プレースホルダを使う。
✅ 解答例を見る(自分で解いてから)
<?php

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

$stmt = $pdo->prepare('SELECT name FROM users WHERE age >= ? ORDER BY id');
$stmt->execute([25]);

foreach ($stmt->fetchAll(PDO::FETCH_ASSOC) as $row) {
    echo $row['name'] . "\n";
}