PDOにおける結果セットの全行取得 (PHP)
クエリ結果からすべての行を配列として直接取得することができます。
これはfetchAllメソッドを使用して行います。
このメソッドのさまざまな動作モードを見ていきましょう。
すべての例はテストテーブル用です。
単純な配列の取得
単純なデータ配列を取得するためにfetchAllメソッドを適用してみましょう。
そのために、メソッドのパラメータを空のままにします:
<?php
$res = $pdo->query('SELECT * FROM users');
$row = $res->fetchAll();
var_dump($row);
?>
コード実行結果:
[
[
'id' => 1,
'name' => 'name1',
'age' => 21,
'salary' => 500,
],
[
'id' => 2,
'name' => 'name2',
'age' => 22,
'salary' => 600,
],
[
'id' => 3,
'name' => 'name3',
'age' => 23,
'salary' => 600,
],
[
'id' => 4,
'name' => 'name4',
'age' => 24,
'salary' => 700,
],
[
'id' => 5,
'name' => 'name5',
'age' => 25,
'salary' => 800,
],
]
単一カラムの取得
テーブルから単一のカラムのみを取得してみましょう。
そのためには、fetchAllメソッドにFETCH_COLUMNパラメータを渡します:
<?php
$res = $pdo->query('SELECT name FROM users');
$row = $res->fetchAll(PDO::FETCH_COLUMN);
var_dump($row);
?>
コード実行結果:
[
'name1',
'name2',
'name3',
'name4',
'name5',
]
キーと値のペアの取得
キーをID、値をユーザー名とするキーと値のペア形式でデータを取得してみましょう。
そのためには、fetchAllメソッドのパラメータにFETCH_KEY_PAIRモードを渡します:
<?php
$res = $pdo->query('SELECT id, name FROM users');
$row = $res->fetchAll(PDO::FETCH_KEY_PAIR);
var_dump($row);
?>
コード実行結果:
[
1 => 'name1',
2 => 'name2',
3 => 'name3',
4 => 'name4',
5 => 'name5',
]
一意のフィールドを使用したレコードの取得
一意のフィールド(通常はid)を各サブ配列のキーとするように設定できます:
<?php
$res = $pdo->query('SELECT * FROM users');
$row = $res->fetchAll(PDO::FETCH_UNIQUE);
var_dump($row);
?>
コード実行結果:
[
1 => [
'id' => 1,
'name' => 'name1',
'age' => 21,
'salary' => 500,
],
2 => [
'id' => 2,
'name' => 'name2',
'age' => 22,
'salary' => 600,
],
3 => [
'id' => 3,
'name' => 'name3',
'age' => 23,
'salary' => 600,
],
4 => [
'id' => 4,
'name' => 'name4',
'age' => 24,
'salary' => 700,
],
5 => [
'id' => 5,
'name' => 'name5',
'age' => 25,
'salary' => 800,
],
]
実践的な課題
このレッスンで説明したメソッドを使用して、
テーブルusersからすべてのユーザーを出力してください。
テーブルusersから1行のデータを出力してください。
ユーザーの名前と年齢をキーと値のペア形式で出力してください。