概要

既存行の 書き換え削除 を担うのが UPDATEDELETE。書き換えは UPDATE users SET age = ? WHERE id = ?、削除は DELETE FROM users WHERE id = ? で、SET で更新内容、WHERE で対象範囲を指定。値の埋め込みは prepare + execute の組み合わせ。

実行後の 結果確認fetchAll() ではなく $stmt->rowCount() で「影響を受けた行数」を取る。1 なら期待通り 1 件更新、0 なら該当行が無くて何も変わっていない、と判断できる。「該当行が無ければ 404 を返す」「複数行更新が起きたら警告ログ」などの分岐に使う。

このトピックで最重要の警告が 「WHERE を忘れると全行が対象になる」 こと。UPDATE users SET age = 0 は全ユーザーの年齢を 0 にする破壊的な文、DELETE FROM users はテーブルを空にする。SQL を書くときは「WHERE を書いたか?」を必ず指差し確認するクセを付ける。怖ければ、本番では先に同じ WHERE で SELECT して件数を確認してから実行するのが定石。

学習目標

ドリル

no 内容
01 WHERE で 1 件 UPDATE → SELECT で結果確認
02 DELETE 後に rowCount を出力 + 残った行を確認

演習: ドリル 01 — WHERE で 1 件 UPDATE

問題

users テーブルの 花子 の年齢を 26 に書き換えてから、 id 昇順で全件を "{id}: {name} ({age})" 形式で出力してください。

初期データ:

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

期待される出力:

1: 太郎 (20)
2: 花子 (26)
3: 次郎 (30)

ヒント

演習: ドリル 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)

ヒント

この章を AI に聞く

  1. 「ch06 — UPDATE と DELETE」のつまずきやすいポイントを、初学者向けに3つ教えてください

    💬 ChatGPT 📘 Claude ✨ Gemini

  2. 「ch06 — UPDATE と DELETE」について、自分の手で試せる練習問題を3つ出してください (難易度を上げながら)

    💬 ChatGPT 📘 Claude ✨ Gemini

  3. 「ch06 — UPDATE と DELETE」を学んだ後、次に学ぶと良いトピックは何ですか?理由も教えてください

    💬 ChatGPT 📘 Claude ✨ Gemini

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

ch06 — UPDATE と DELETE」を読み終えました。
学んだことを誰かに教えると、もっと記憶に残ります。

X で共有 Hatena LINE