PDOStatement::fetchAll — 結果セット内のすべての行を含む配列を返します (PHP 5 >= 5.1.0、PECL pdo >= 0.1.0)
array PDOStatement::fetchAll ([ int $fetch_style [,mixed $fetch_argument [, array $ctor_args = array() ]]] )
fetch_style
次の行を呼び出し元にどのように返すかを制御します。この値は PDO::FETCH_* 一連の定数のいずれかである必要があり、デフォルトは PDO::ATTR_DEFAULT_FETCH_MODE の値です (デフォルトは PDO::FETCH_BOTH)。
結果セット内の 1 つの列のすべての値を含む配列を返すには、PDO::FETCH_COLUMN を指定します。 column-index パラメータを指定して、目的の列を取得します。
結果セット内の単一列の一意の値を取得するには、PDO::FETCH_COLUMN と PDO::FETCH_UNIQUE をビットごとに OR する必要があります。
指定された列に従ってグループ化された値を含む連想配列を返すには、PDO::FETCH_COLUMN と PDO::FETCH_GROUP をビットごとに OR する必要があります。
fetch_argumentこのパラメータは、fetch_style パラメータの値に応じて異なる意味を持ちます。
PDO::FETCH_COLUMN
: 0 から始まるインデックス付きの指定された列を返します。
PDO::FETCH_CLASS
: 指定されたクラスのインスタンスを返し、各行の列をクラス内の対応する属性名にマッピングします。
PDO::FETCH_FUNC
: 各行の列をパラメータとして指定された関数に渡し、関数の呼び出し後に結果を返します。
ctor_args fetch_style パラメータが PDO::FETCH_CLASS の場合、カスタム クラスのコンストラクタのパラメータ。
PDOStatement::fetchAll() は、結果セット内の残りの行をすべて含む配列を返します。この配列の各行は、列値の配列、または各列名に対応するプロパティを持つオブジェクトのいずれかです。
この方法を使用して大規模な結果セットを取得すると、システムに大きな負荷がかかり、大量のネットワーク リソースが消費される可能性があります。すべてのデータを取得して PHP で操作するのではなく、データベース サービスを使用して結果セットを処理することを検討してください。たとえば、データを取得して PHP で処理する前に、SQL で WHERE 句と ORDER BY 句を使用して結果を修飾します。
<?php$sth = $dbh->prepare("SELECT name, color FROM Fruit");$sth->execute();/* 結果セット内の残りの行をすべて取得します*/print("結果セットの残りの行:n");$result = $sth->fetchAll();print_r($result);?>
上記の例の出力は次のとおりです。
結果セット内の残りの行をすべてフェッチします。 Array( [0] => Array ( [NAME] => pear [0] => pear [COLOUR] => green [1] => green ) [1] =>配列 ( [名前] => スイカ [0] => スイカ [色] => ピンク [1] => ピンク ))
次の例は、SQL ステートメント自体が行ごとに複数の列を返す場合がありますが、結果セットから 1 つの列のすべての値を返す方法を示しています。
<?php$sth = $dbh->prepare("SELECT name, color FROM Fruit");$sth->execute();/* 最初の列の値をすべて取得*/$result = $sth-> fetchAll(PDO ::FETCH_COLUMN, 0);var_dump($result);?>
上記の例の出力は次のとおりです。
Array(3)( [0] => 文字列(5) => リンゴ [1] => 文字列(4) => 梨 [2] => 文字列(10) => スイカ)
次の例は、結果セット内の指定された列の値によってグループ化された連想配列を返す方法を示しています。配列には 3 つのキーが含まれています。返されたリンゴと洋ナシの配列には 2 つの異なる色が含まれていますが、返されたスイカの配列には 1 色だけが含まれています。
<?php$insert = $dbh->prepare("果物(名前、色)の値(?, ?)に挿入");$insert->execute(array('apple', 'green'));$insert ->execute(array('pear', ' yellow'));$sth = $dbh->prepare("SELECT name, color FROM Fruit");$sth->execute();/* 最初の列に基づいてグループ化*/var_dump($sth->fetchAll(PDO::FETCH_COLUMN|PDO::FETCH_GROUP));?>
上記の例の出力は次のとおりです。
配列(3) { ["リンゴ"]=> 配列(2) { [0]=> 文字列(5) "緑" [1]=> 文字列(3) "赤" } ["梨"]=> 配列(2) { [0]=> 文字列(5) "緑" [1]=> 文字列(6) "黄" } ["スイカ"]=> 配列(1) { [0]=> 文字列(5) "緑" }}
次の例は、PDO::FETCH_CLASS 取得スタイルの動作を示しています。
<?phpclass Fruit { public $name; public $colour;}$sth = $dbh->prepare("SELECT name, color FROM Fruit");$sth->execute();$result = $sth->fetchAll( PDO::FETCH_CLASS, "フルーツ");var_dump($result);?>
上記の例の出力は次のとおりです。
array(3) { [0]=> オブジェクト(果物)#1 (2) { ["名前"]=> 文字列(5) "リンゴ" ["色"]=> 文字列(5) "緑" } [ 1]=> オブジェクト(果物)#2 (2) { ["名前"]=> 文字列(4) "梨" ["色"]=> 文字列(6) "黄色" } [2]=> オブジェクト(フルーツ)#3 (2) { ["名前"]=> 文字列(10) "スイカ" ["色"]=> 文字列(4) "ピンク" }}
次の例は、PDO::FETCH_FUNC 取得スタイルの動作を示しています。
<?phpfunction Fruit($name, $colour) { return "{$name}: {$colour}";}$sth = $dbh->prepare("SELECT name, color FROM Fruit");$sth->execute ();$result = $sth->fetchAll(PDO::FETCH_FUNC, "フルーツ");var_dump($result);?>
上記の例の出力は次のとおりです。
array(3) { [0]=> string(12) "リンゴ: 緑" [1]=> string(12) "梨: 黄色" [2]=> string(16) "スイカ: ピンク"}