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]);テストケース
期待される出力
花子
次郎
📄 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";
}