UPDATE と DELETE
テクノロジ系 / db (PDO / SQL / マルチDB)
UPDATE と DELETE
Lesson 11 / Chapter 6
UPDATE は「書き換える」
UPDATE users SET age = 26 WHERE name = '花子';
SET 列 = 値で書き換える列を指定WHERE 条件を 必ず 付ける- WHERE を忘れると 全行が書き変わる (事故)
PHP からも prepare + execute
<?php
$pdo = new PDO('sqlite:' . getenv('DOJO_DB_PATH'));
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$stmt = $pdo->prepare("UPDATE users SET age = ? WHERE name = ?");
$stmt->execute([26, '花子']);- INSERT と同じ書き方
?は SET の値、WHERE の値、両方に使える
DELETE は「消す」
DELETE FROM users WHERE id = 2;
DELETE FROM テーブルの後にWHERE 条件- これも WHERE を忘れると 全行消える
<?php
$stmt = $pdo->prepare("DELETE FROM users WHERE id = ?");
$stmt->execute([2]);影響行数は rowCount()
<?php
$stmt = $pdo->prepare("DELETE FROM users WHERE age >= ?");
$stmt->execute([25]);
echo "削除した件数: " . $stmt->rowCount() . "\n";- 直前の UPDATE / DELETE が 何件に影響したか を返す
- 「該当 0 件だった」のチェックに使える
- SELECT の件数を取るのには 使わない (SELECT は環境差あり)
確認は SELECT で
<?php
// DELETE 実行後…
foreach ($pdo->query("SELECT id, name, age FROM users ORDER BY id") as $row) {
echo "{$row['id']}: {$row['name']} ({$row['age']})\n";
}- UPDATE / DELETE 自体は画面に何も出さない
- 結果を確認するには SELECT で読む
このチャプターでできるようになること
✅ UPDATE ... SET ... WHERE ... で書き換えられる
✅ DELETE FROM ... WHERE ... で消せる
✅ rowCount() で影響行数を取れる
✅ WHERE 忘れは全行に影響する事故だと理解した
→ ドリルへ
考えてみよう
既定では正解・不正解の判定はしません。自分のペースで「答えを見る」を。採点してほしい場合だけ「採点してほしい」を押してください。
ドリル 01 — WHERE で 1 件 UPDATE
問題
users テーブルの 花子 の年齢を 26 に書き換えてから、
id 昇順で全件を "{id}: {name} ({age})" 形式で出力してください。
初期データ:
1: 太郎 (20) 2: 花子 (25) 3: 次郎 (30)
期待される出力:
1: 太郎 (20) 2: 花子 (26) 3: 次郎 (30)
採点
php scripts/grade.php topics/db/ch06-update-delete/drill/01-update-age/
ヒント
$pdo->prepare("UPDATE users SET age = ? WHERE name = ?")を使う$stmt->execute([26, '花子'])で値を渡すWHEREを絶対に書く (忘れると全行が 26 になる)
ドリル 02 — DELETE + rowCount
問題
users テーブルから age >= 25 の行を全部削除してから、
"削除した件数: {n}"の形でrowCount()の値を出す- 続いて、残った行を
id昇順で"{id}: {name} ({age})"形式で出す
初期データ:
1: 太郎 (20) 2: 花子 (25) 3: 次郎 (30) 4: 三郎 (40)
age >= 25 に該当するのは 3 行 (花子・次郎・三郎)。
期待される出力:
削除した件数: 3 1: 太郎 (20)
採点
php scripts/grade.php topics/db/ch06-update-delete/drill/02-delete-with-rowcount/
ヒント
$pdo->prepare("DELETE FROM users WHERE age >= ?")を使う$stmt->execute([25])で値を渡す$stmt->rowCount()で削除件数を取得- 続けて SELECT で残った行を foreach で出力