第9章 データベース連携 / 第3回 模擬試験
PHPのPDOにおける結果セットの取得(フェッチ)に関する次の記述のうち、誤っているものはどれか。
`fetch()`メソッドは、結果セットから1行ずつ取得する。
`fetchAll()`メソッドは、結果セットの全行を一度に配列として取得する。
フェッチモードを指定することで、連想配列やオブジェクトなど取得形式を変更できる。
`fetch()`メソッドは、必ずSQL文の実行前に呼び出す必要がある。
正解
解説
`fetch()`メソッドは、`execute()`でSQL文を「実行した後」に呼び出し、結果セットから1行ずつデータを取得するためのメソッドです。「実行前に呼び出す必要がある」という記述は誤りです(実行前に呼び出すと結果セットがまだ存在しないためエラーになります)。
他の選択肢が正しい理由は次の通りです。
・`fetch()`は結果セットのカーソルを1行ずつ進めながらデータを取得します。
・`fetchAll()`は結果セットの全行を一度にまとめて配列として取得します(大量データの場合はメモリ使用量に注意が必要です)。
・フェッチモード(`PDO::FETCH_ASSOC`, `PDO::FETCH_OBJ`など)を指定することで、連想配列・オブジェクトなど、取得したデータの形式を変更できます。
例:
```
$stmt = $pdo->query('SELECT * FROM users');
while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
print_r($row);
}
```
(参照: 独習PHP 第4版 第9章 データベース連携 9.6節 結果セットの取得 p.444〜458)