概要
接続できたら、まずやりたいのは 「テーブルからデータを取り出す」 こと。これを担う SQL が SELECT で、基本形は SELECT * FROM users のように「どの列を・どのテーブルから」を書くだけ。* は全列、SELECT id, name FROM users のように 列を絞る 書き方も覚えておく (取りすぎない方が速い)。
PHP 側では $pdo->query("SELECT ...") で SQL を投げて結果セットを受け取る。行の取り出しは foreach ($pdo->query(...) as $row) で 1 行ずつ回す か、$stmt->fetchAll() で 配列にまとめて受け取る の 2 パターン。件数が少ないなら fetchAll()、何万件なら foreach でストリーミング。
取り出された $row は 連想配列 で、$row['id'] / $row['name'] のように列名でアクセスする。値は基本すべて文字列で来るので、数値計算したいときは (int)$row['age'] のようにキャストする。「SQL を 1 つ書いて結果を foreach で回す」基本リズムを身体に通す。
学習目標
SELECTで行を取り出すコードを書けるforeach ($pdo->query(...) as $row)で 1 行ずつ処理できるfetchAll()で全行を配列にまとめて取れる- 行は連想配列 (
$row['name']) としてアクセスできる
ドリル
| no | 内容 |
|---|---|
| 01 | users を全件 SELECT して id: name 形式で出力 |
| 02 | COUNT(*) で件数を出力 |
| 03 | name 列だけ取り出し、改行区切りで出力 |
📝 演習: ドリル 01 — 全件 SELECT して "id: name" 形式で出力
問題
users テーブル (id, name, age) には次の 3 行が入っています。
| id | name | age |
|---|---|---|
| 1 | 太郎 | 20 |
| 2 | 花子 | 25 |
| 3 | 次郎 | 30 |
id の昇順で全件 SELECT し、各行を id: name の形式 (id と name を : で連結) でちょうど 3 行出力してください。
期待される出力:
1: 太郎
2: 花子
3: 次郎ヒント
SELECT id, name FROM users ORDER BY idforeach ($pdo->query($sql) as $row) { ... }- 出力は
echo $row['id'] . ': ' . $row['name'] . "\n";
📝 演習: ドリル 02 — 件数を出力
問題
users テーブルの行数を SELECT COUNT(*) で取得し、その数字をちょうど 1 行で出力してください。
users には 3 行入っています (前の drill と同じデータ)。
期待される出力:
3ヒント
SELECT COUNT(*) AS cnt FROM users- 1 行 1 列だけ返るので
$stmt->fetch(PDO::FETCH_ASSOC)で 1 行だけ取り出す echo $row['cnt'] . "\n";
📝 演習: ドリル 03 — name 列だけを取り出して改行区切りで出力
問題
users テーブルから name 列だけを id 昇順で取得し、各名前を 1 行ずつ出力してください。
users には 3 行入っています (前の drill と同じデータ)。
期待される出力:
太郎
花子
次郎ヒント
SELECT name FROM users ORDER BY idforeach ($pdo->query($sql) as $row) { echo $row['name'] . "\n"; }fetchAllを使って配列にしてforeachでも OK