PDOStatement::fetchAll
(PHP 5 >= 5.1.0, PECL pdo >= 0.1.0)
PDOStatement::fetchAll — 全ての結果行を含む配列を返す
説明
$fetch_style
[, mixed $fetch_argument
[, array $ctor_args = array()
]]] )パラメータ
-
fetch_style -
PDOStatement::fetch() に文章化されているような 返される配列の内容を制御します。 デフォルトは
PDO::ATTR_DEFAULT_FETCH_MODEの値 (そのデフォルトはPDO::FETCH_BOTH) です。結果セットから単一カラムの全ての値を含む配列を返す場合、
PDO::FETCH_COLUMNを指定します。column-indexパラメータにどのカラムを返すかを 指定することができます。結果セットから単一カラムの一意な値のみ取得する場合、
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() は、 結果セットに残っている全ての行を含む配列を返します。 この配列は、カラム値の配列 もしくは各カラム名に対応するプロパティを持つオブジェクトをして 各行を表します。
大きな結果セットをフェッチするためにこのメソッドを使用することは、 システムとネットワークリソースに大量の要求を行うことになります。 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] => pear
[0] => pear
[COLOUR] => green
[1] => green
)
[1] => 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) "green"
}
}
例4 各結果用のクラスのインスタンス作成
次の例は、
PDO::FETCH_CLASS の振る舞いを示すものです。
<?php
class 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"
}
}
例5 各結果に対する関数コール
次の例は、
PDO::FETCH_FUNC の振る舞いを示すものです。
<?php
function 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"
}
参考
- PDO::query() - SQL ステートメントを実行し、結果セットを PDOStatement オブジェクトとして返す
- PDOStatement::fetch() - 結果セットから次の行を取得する
- PDOStatement::fetchColumn() - 結果セットの次行から単一カラムを返す
- PDO::prepare() - 文を実行する準備を行い、文オブジェクトを返す
- PDOStatement::setFetchMode() - この文に対するデフォルトのフェッチモードを設定する