採点されません。匿名です。 間違えることは学習の一部です。読むだけでもかまいません。

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 idforeach で回す

ドリル 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 が取れる