INSERT で 1 件追加する
テクノロジ系 / db (PDO / SQL / マルチDB)
INSERT で 1 件追加する
Lesson 11 / Chapter 5
SELECT は「読む」、INSERT は「書く」
INSERT INTO users (name, age) VALUES ('新人', 22);INTO テーブル名 (列, 列)で対象を指定VALUES (値, 値)で実際に入れる値を指定- 1 文で 1 行追加される
PHP からは prepare + execute
<?php
$pdo = new PDO('sqlite:' . getenv('DOJO_DB_PATH'));
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$stmt = $pdo->prepare("INSERT INTO users (name, age) VALUES (?, ?)");
$stmt->execute(['新人', 22]);?は プレースホルダ。値の置き場所execute([...])で順番に値を当てはめる- 値を SQL に直接埋め込まない → 安全 (ch09 で詳しく)
自動採番 ID は lastInsertId()
<?php
$stmt = $pdo->prepare("INSERT INTO users (name, age) VALUES (?, ?)");
$stmt->execute(['新人', 22]);
$id = $pdo->lastInsertId();
echo "追加したIDは {$id}\n";id列がAUTOINCREMENTのとき、INSERT 後に自動採番された値を取れる- 直前の INSERT 1 件分の ID を返す
追加されたか確認は SELECT
<?php
$stmt = $pdo->prepare("INSERT INTO users (name, age) VALUES (?, ?)");
$stmt->execute(['新人', 22]);
foreach ($pdo->query("SELECT id, name, age FROM users ORDER BY id") as $row) {
echo "{$row['id']}: {$row['name']} ({$row['age']})\n";
}- INSERT 自体は何も画面に出さない
- 「ちゃんと入ったか」を見るには SELECT で読む
このチャプターでできるようになること
✅ INSERT INTO ... VALUES (?, ?) の形が書ける
✅ prepare + execute([...]) でプレースホルダに値を渡せる
✅ lastInsertId() で自動採番された ID を取り出せる
✅ INSERT 後に SELECT で結果を確認できる
→ ドリルへ
考えてみよう
既定では正解・不正解の判定はしません。自分のペースで「答えを見る」を。採点してほしい場合だけ「採点してほしい」を押してください。
ドリル 01 — INSERT して全件確認
問題
users テーブルに 新人 (22 歳) を 1 件追加してから、
id 昇順で全件を "{id}: {name} ({age})" 形式で出力してください。
初期データは 太郎 (id=1, 20 歳) と 花子 (id=2, 25 歳) の 2 件。
INSERT 後は 3 件 出力されるはず。
期待される出力:
1: 太郎 (20) 2: 花子 (25) 3: 新人 (22)
採点
php scripts/grade.php topics/db/ch05-insert/drill/01-insert-one/
ヒント
$pdo->prepare("INSERT INTO users (name, age) VALUES (?, ?)")を使う$stmt->execute(['新人', 22])で値を渡す- 確認は
SELECT id, name, age FROM users ORDER BY idをforeachで回す
ドリル 02 — lastInsertId を出力
問題
users テーブルに 新人 (22 歳) を 1 件追加してから、
自動採番された ID を "追加したIDは {id}" の形で出力してください。
初期データは 太郎 (id=1) と 花子 (id=2) の 2 件なので、
追加した行の ID は 3 になるはず。
期待される出力:
追加したIDは 3
採点
php scripts/grade.php topics/db/ch05-insert/drill/02-insert-with-lastid/
ヒント
- INSERT は
prepare+execute([...])で実行 - INSERT 直後に
$pdo->lastInsertId()を呼ぶと自動採番された ID が取れる