PDOStatement::fetchAll
(PHP 5 >= 5.1.0, PHP 7, PECL pdo >= 0.1.0)
PDOStatement::fetchAll — 全ての結果行を含む配列を返す
説明
public PDOStatement::fetchAll
([ int $fetch_style
[, mixed $fetch_argument
[, array $ctor_args
= array()
]]] ) : array
パラメータ
fetch_style
PDOStatement::fetch() に文章化されているような 返される配列の内容を制御します。 デフォルトは
PDO::ATTR_DEFAULT_FETCH_MODE
の値 (そのデフォルトはPDO::FETCH_BOTH
) です。結果セットから単一カラムの全ての値を含む配列を返す場合、
PDO::FETCH_COLUMN
を指定します。fetch_argument
パラメータにどのカラムを返すかを 指定することができます。結果セットから単一カラムの一意な値のみ取得する場合、
PDO::FETCH_UNIQUE
をビット OR したPDO::FETCH_COLUMN
を指定します。指定したカラムの値によってグループ化した連想配列を返す場合、
PDO::FETCH_GROUP
をビット OR したPDO::FETCH_COLUMN
を指定します。fetch_argument
この引数は、
fetch_style
の値によって意味が異なります。PDO::FETCH_COLUMN
: ここで指定した、 0 から始まる番号のカラムを返します。PDO::FETCH_CLASS
: ここで指定したクラスのインスタンスを返します。各行のカラムがクラスのプロパティ名にマッピングされます。PDO::FETCH_FUNC
: ここで指定した関数をコールした結果を返します。各行のカラムを関数コール時のパラメータとします。
ctor_args
fetch_style
がPDO::FETCH_CLASS
のときに使う、独自のクラスコンストラクタへの引数。
返り値
PDOStatement::fetchAll() は、
結果セットに残っている全ての行を含む配列を返します。
この配列は、カラム値の配列もしくは各カラム名に対応するプロパティを持つオブジェクトとして各行を表します。
取得結果がゼロ件だった場合は空の配列を返し、
失敗した場合は false
を返します。
大きな結果セットをフェッチするためにこのメソッドを使用することは、 システムとネットワークリソースに大量の要求を行うことになります。 PHP で全てのデータ処理と操作を行うよりも、データベースサーバー側で 結果セットを操作することを検討してください。例えば、PHP で処理を行う前に SQL で WHERE 句や ORDER BY 句を使用し、結果を制限することです。
例
例1 結果セットに残っている全ての行をフェッチする
<?php$sth = $dbh->prepare("SELECT name, colour FROM fruit");$sth->execute();/* 結果セットに残っている全ての行をフェッチする */print("Fetch all of the remaining rows in the result set:\n");$result = $sth->fetchAll();print_r($result);?>
上の例の出力は、 たとえば以下のようになります。
Fetch all of the remaining rows in the result set: Array ( [0] => Array ( [name] => apple [0] => apple [colour] => red [1] => red ) [1] => Array ( [name] => pear [0] => pear [colour] => green [1] => green ) [2] => Array ( [name] => watermelon [0] => watermelon [colour] => pink [1] => pink ) )
例2 結果セットから単一カラムの全ての値を取得する
以下の例は、 SQL ステートメント自身が行毎に複数のカラムを返す場合において、 どのように結果セットから単一カラムの全ての値を取得するかを 例示しています。
<?php$sth = $dbh->prepare("SELECT name, colour FROM fruit");$sth->execute();/* 最初のカラムの全ての値を取得する */$result = $sth->fetchAll(PDO::FETCH_COLUMN, 0);var_dump($result);?>
上の例の出力は、 たとえば以下のようになります。
Array(3) ( [0] => string(5) => apple [1] => string(4) => pear [2] => string(10) => watermelon )
例3 単一カラムによる全ての値のグループ化
以下の例は、どのように結果セット中の特定のカラムの値によって
グループ化された連想配列を返すかを例示しています。
その配列は 3 つのキーを有します。値 apple
、
pear
は異なる 2
つの異なる色を有する配列として返され、
一方 watermelon
は 1
つの色のみ有する配列として返されます。
<?php$insert = $dbh->prepare("INSERT INTO fruit(name, colour) VALUES (?, ?)");$insert->execute(array('apple', 'green'));$insert->execute(array('pear', 'yellow'));$sth = $dbh->prepare("SELECT name, colour FROM fruit");$sth->execute();/* 最初のカラムの値によってグループ化する */var_dump($sth->fetchAll(PDO::FETCH_COLUMN|PDO::FETCH_GROUP));?>
上の例の出力は、 たとえば以下のようになります。
array(3) { ["apple"]=> array(2) { [0]=> string(5) "green" [1]=> string(3) "red" } ["pear"]=> array(2) { [0]=> string(5) "green" [1]=> string(6) "yellow" } ["watermelon"]=> array(1) { [0]=> string(5) "pink" } }
例4 各結果用のクラスのインスタンス作成
次の例は、
PDO::FETCH_CLASS
の振る舞いを示すものです。
<?phpclass fruit { public $name; public $colour;}$sth = $dbh->prepare("SELECT name, colour FROM fruit");$sth->execute();$result = $sth->fetchAll(PDO::FETCH_CLASS, "fruit");var_dump($result);?>
上の例の出力は、 たとえば以下のようになります。
array(3) { [0]=> object(fruit)#1 (2) { ["name"]=> string(5) "apple" ["colour"]=> string(5) "green" } [1]=> object(fruit)#2 (2) { ["name"]=> string(4) "pear" ["colour"]=> string(6) "yellow" } [2]=> object(fruit)#3 (2) { ["name"]=> string(10) "watermelon" ["colour"]=> string(4) "pink" } [3]=> object(fruit)#4 (2) { ["name"]=> string(5) "apple" ["colour"]=> string(3) "red" } [4]=> object(fruit)#5 (2) { ["name"]=> string(4) "pear" ["colour"]=> string(5) "green" } }
例5 各結果に対する関数コール
次の例は、
PDO::FETCH_FUNC
の振る舞いを示すものです。
<?phpfunction fruit($name, $colour) { return "{$name}: {$colour}";}$sth = $dbh->prepare("SELECT name, colour FROM fruit");$sth->execute();$result = $sth->fetchAll(PDO::FETCH_FUNC, "fruit");var_dump($result);?>
上の例の出力は、 たとえば以下のようになります。
array(3) { [0]=> string(12) "apple: green" [1]=> string(12) "pear: yellow" [2]=> string(16) "watermelon: pink" [3]=> string(10) "apple: red" [4]=> string(11) "pear: green" }
参考
- PDO::query() - SQL ステートメントを実行し、結果セットを PDOStatement オブジェクトとして返す
- PDOStatement::fetch() - 結果セットから次の行を取得する
- PDOStatement::fetchColumn() - 結果セットの次行から単一カラムを返す
- PDO::prepare() - 文を実行する準備を行い、文オブジェクトを返す
- PDOStatement::setFetchMode() - この文に対するデフォルトのフェッチモードを設定する