概要

SELECT * FROM users は全件取れるが、実用では 「条件に合う行だけ」 が欲しい。これを担うのが WHERE で、SELECT * FROM users WHERE age >= 25 のように「列に対する条件」を書く。比較演算子 (= >= < !=)、論理結合 (AND OR)、あいまい検索 (LIKE 'A%') を組み合わせて絞り込む。

ここで最重要なのが、値を SQL に直接書かず、必ず ? プレースホルダを使う こと。"WHERE name = '$name'" のように文字列連結すると、入力に '; が混ざった瞬間に SQL が壊れる (= SQL インジェクションの入り口)。PHP では「SQL の を先に登録 → 値は後から 別ルート で渡す」という 2 段階で書く。これが prepareexecute の役割。

リズムは $stmt = $pdo->prepare("SELECT * FROM users WHERE age >= ?") で型紙を作り、$stmt->execute([25]) で値を埋め込み、$stmt->fetchAll() で結果を受ける。? は左から順に配列要素と対応。複数条件でも値の配列を渡すだけ。このリズムが INSERT / UPDATE / DELETE すべての基本形になる。

学習目標

ドリル

no 内容
01 age = ? で特定年齢の名前を出力
02 age >= ? で 25 以上の人を出力
03 name LIKE ? AND age < ? で 2 条件検索

演習: ドリル 01 — `age = ?` で特定年齢の名前を出力

問題

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

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

age がちょうど 25 の人の名前 を、id 昇順で 1 行ずつ出力してください。

期待される出力:

花子

必須ルール

ヒント

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

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

問題

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

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

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

期待される出力:

花子
次郎

必須ルール

ヒント

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

演習: ドリル 03 — `name LIKE ? AND age < ?` で 2 条件検索

問題

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

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

次の 2 条件を両方 満たす人の名前を、id 昇順で 1 行ずつ出力してください。

期待される出力:

太郎
太田

必須ルール

ヒント

$sql = 'SELECT name FROM users WHERE name LIKE ? AND age < ? ORDER BY id';
$stmt = $pdo->prepare($sql);
$stmt->execute(['太%', 30]);

この章を AI に聞く

  1. 「ch04 — WHERE / プレースホルダ / prepare + execute」のつまずきやすいポイントを、初学者向けに3つ教えてください

    💬 ChatGPT 📘 Claude ✨ Gemini

  2. 「ch04 — WHERE / プレースホルダ / prepare + execute」について、自分の手で試せる練習問題を3つ出してください (難易度を上げながら)

    💬 ChatGPT 📘 Claude ✨ Gemini

  3. 「ch04 — WHERE / プレースホルダ / prepare + execute」を学んだ後、次に学ぶと良いトピックは何ですか?理由も教えてください

    💬 ChatGPT 📘 Claude ✨ Gemini

🎉 受講お疲れさまでした!

ch04 — WHERE / プレースホルダ / prepare + execute」を読み終えました。
学んだことを誰かに教えると、もっと記憶に残ります。

X で共有 Hatena LINE