関数・クラス解説

PDOStatement::fetchAll

version:PHP 5 >= 5.1.0, PHP 7, PECL pdo (公式)

全ての結果行を含む配列を返す

公式リファレンス

書式

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 結果セットに残っている全ての行をフェッチする

$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 ステートメント自身が行毎に複数のカラムを返す場合において、 どのように結果セットから単一カラムの全ての値を取得するかを 例示しています。

$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 つの色のみ有する配列として返されます。

$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 の振る舞いを示すものです。

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" } [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 の振る舞いを示すものです。

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" [3]=> string(10) "apple: red" [4]=> string(11) "pear: green" }

参考

  • PDO::query() - SQL ステートメントを実行し、結果セットを PDOStatement オブジェクトとして返す
  • PDOStatement::fetch() - 結果セットから次の行を取得する
  • PDOStatement::fetchColumn() - 結果セットの次行から単一カラムを返す
  • PDO::prepare() - 文を実行する準備を行い、文オブジェクトを返す
  • PDOStatement::setFetchMode() - この文に対するデフォルトのフェッチモードを設定する
  • ワード検索


    ※入力キーワードが、関数名・説明文・タグに含まれるものを検索

    関数名アルファベット別

    A B C D E F G H I J
    K L M N O P Q R S T
    U V W X Y Z _

    最終更新一覧

    stristr
     大文字小文字を区別せず文字列を検索し、ヒット箇所以降(あるいは以前)の文字列を返却

    stripslashes
     バックスラッシュでエスケープされた文字列から、バックスラッシュを取り除く

    stripos
     大文字小文字を区別せずに文字列が最初に現れる位置を取得する

    stripcslashes
     addcslashes() でクォートされた文字列をアンクォートする

    strip_tags
     文字列から HTML と PHP のタグを除去して返却

    strcspn
     指定した文字が最初に現れる位置を調べる

    strcoll
     ロケールに基づいて2つの文字列を比較し同じか(あるいは大小)を判定する

    strcmp
     2つの文字列を比較し同じか(あるいは大小)を判定する

    strchr
     strstr() のエイリアス

    strcasecmp
     2つの文字列を比較(大文字小文字を区別せず同じとみなす)

    カテゴリー一覧

    PHP の振る舞いの変更
    音声フォーマットの操作
    認証サービス
    コマンドライン関連
    圧縮およびアーカイブ
    暗号
    データベース関連
    日付および時刻関連
    ファイルシステム
    自然言語および文字エンコーディング
    画像処理および作成
    メール関連
    数学
    テキスト以外の MIME 型
    プロセス制御
    その他の基本モジュール
    その他のサービス
    検索エンジン用の拡張モジュール
    サーバー固有のモジュール
    セッション関連
    テキスト処理
    変数・データ型関連
    ウェブサービス
    Windows 用のモジュール
    XML 操作
    GUI用の拡張モジュール