概要
SELECT で取り出した結果セットの 読み出し方 には、目的別にいくつか手段がある。ここまでは fetchAll() だけ使ってきたが、PDO には用途別の関数があり、適切に選ぶとコードが短くなりメモリも節約できる。
主要な顔ぶれは 3 つ。fetchAll(PDO::FETCH_ASSOC) は 全行を連想配列の配列 で取る。fetch() は 1 回ごとに 1 行だけ 取り出すループ用で、while ($row = $stmt->fetch()) の形で何万件にも対応できる (全件をメモリに載せない)。fetchColumn() は最初の列の 単一値 を返す関数で、COUNT(*) などの集計や 1 項目取得にぴったり。
fetchAll の FETCH モード には FETCH_ASSOC (連想配列) / FETCH_NUM (数値添字) / FETCH_OBJ (オブジェクト) などがあり、実務では FETCH_ASSOC 固定が多い。意識すべきは「件数が多いときは fetch でストリーミング」「単一値は fetchColumn」の使い分け。
学習目標
fetchAll(PDO::FETCH_ASSOC)で全件を 連想配列の配列 で取れるfetch()で 1 件ずつ取り出すループが書けるfetchColumn()でCOUNT(*)などの 単一値 を取れる- FETCH モードを目的別に使い分けられる
ドリル
| no | 内容 |
|---|---|
| 01 | fetchAll(PDO::FETCH_ASSOC) で全件取得して表示 |
| 02 | fetchColumn で COUNT(*) の単一値を取得 |
📝 演習: ドリル 01 — fetchAll(PDO::FETCH_ASSOC)
問題
users テーブルを id 昇順で fetchAll(PDO::FETCH_ASSOC) で取得して、
各行を "{id}: {name}" 形式で出力してください。
初期データ:
1: 太郎
2: 花子
3: 次郎
期待される出力:
1: 太郎
2: 花子
3: 次郎ヒント
$stmt = $pdo->query("SELECT id, name FROM users ORDER BY id");$rows = $stmt->fetchAll(PDO::FETCH_ASSOC);foreach ($rows as $row)で回す
📝 演習: ドリル 02 — fetchColumn で COUNT(*)
問題
users テーブルの 件数 を SELECT COUNT(*) FROM users で取得して、
"件数: {n}" の形式で出力してください。
取り出しには fetchColumn() を使うこと。
初期データは 4 件入っているので、出力は 4 になる。
期待される出力:
件数: 4ヒント
$stmt = $pdo->query("SELECT COUNT(*) FROM users");$count = $stmt->fetchColumn();- 集計の単一値は fetchAll より fetchColumn の方が短く書ける