PHPのPDO Statement::fetchとStatement::fetchAllのあれこれ

サンプルテーブル
ID col1 col2 col3 createdate
1 セル1-1 セル1-2 セル1-3 2022-01-24 17:22:46
2 セル2-1 セル2-2 セル2-3 2022-01-24 17:22:46
3 セル3-1 セル3-2 セル3-3 2022-01-24 17:22:46

fetch(PDO::FETCH_ASSOC)

fetchは結果セットから次の行を1行だけ取得する。
PDO::FETCH_ASSOCは結果セットからカラム名で添字を付けた配列を返す。
Array
(
    [ID] => 1
    [col1] => セル1-1
    [col2] => セル1-2
    [col3] => セル1-3
    [createdate] => 2022-01-24 17:22:46
)

fetchAll(PDO::FETCH_ASSOC)

fetchAllは結果セットから全ての結果行を含む配列を返す取得する。
PDO::FETCH_ASSOCは結果セットからカラム名で添字を付けた配列を返す。
Array
(
    [0] => Array
        (
            [ID] => 1
            [col1] => セル1-1
            [col2] => セル1-2
            [col3] => セル1-3
            [createdate] => 2022-01-24 17:22:46
        )

    [1] => Array
        (
            [ID] => 2
            [col1] => セル2-1
            [col2] => セル2-2
            [col3] => セル2-3
            [createdate] => 2022-01-24 17:22:46
        )

    [2] => Array
        (
            [ID] => 3
            [col1] => セル3-1
            [col2] => セル3-2
            [col3] => セル3-3
            [createdate] => 2022-01-24 17:22:46
        )

)

fetchAll(PDO::FETCH_ASSOC | PDO::FETCH_GROUP)

fetchAllは結果セットから全ての結果行を含む配列を返す取得する。
PDO::FETCH_ASSOCは結果セットからカラム名で添字を付けた配列を返す。
PDO::FETCH_GROUPは結果セットの最初のカラムでグループ化する。
Array
(
    [1] => Array
        (
            [0] => Array
                (
                    [col1] => セル1-1
                    [col2] => セル1-2
                    [col3] => セル1-3
                    [createdate] => 2022-01-24 17:22:46
                )

        )

    [2] => Array
        (
            [0] => Array
                (
                    [col1] => セル2-1
                    [col2] => セル2-2
                    [col3] => セル2-3
                    [createdate] => 2022-01-24 17:22:46
                )

        )

    [3] => Array
        (
            [0] => Array
                (
                    [col1] => セル3-1
                    [col2] => セル3-2
                    [col3] => セル3-3
                    [createdate] => 2022-01-24 17:22:46
                )

        )

)

fetchAll(PDO::FETCH_COLUMN | PDO::FETCH_GROUP)

fetchAllは結果セットから全ての結果行を含む配列を返す取得する。
PDO::FETCH_COLUMNは最初のカラムの配列を返す。
PDO::FETCH_GROUPは結果セットの最初のカラムでグループ化する。
Array
(
    [1] => Array
        (
            [0] => セル1-1
        )

    [2] => Array
        (
            [0] => セル2-1
        )

    [3] => Array
        (
            [0] => セル3-1
        )

)

fetchAll(PDO::FETCH_COLUMN)

fetchAllは結果セットから全ての結果行を含む配列を返す取得する。
PDO::FETCH_COLUMNは最初のカラムの配列を返す。
SQLでそれ以外のカラムがあったとしても最初のカラムだけの配列だけを返す。
Array
(
    [0] => 1
    [1] => 2
    [2] => 3
)

fetchAll(PDO::FETCH_CLASS, "classTable")

class classTable {
	public $ID;
	public $col1;
	public $col2;
	public $col3;
	public $col4;
	public $createdate;
}
fetchAllは結果セットから全ての結果行を含む配列を返す取得する。
PDO::FETCH_CLASSはカラム名と同名のクラスのプロパティに結果を当てはめる。
クラスclassTableにはcol4プロパティがあるがサンプルテーブルにはcol4カラムがないので空欄のまま
Array
(
    [0] => classTable Object
        (
            [ID] => 1
            [col1] => セル1-1
            [col2] => セル1-2
            [col3] => セル1-3
            [col4] => 
            [createdate] => 2022-01-24 17:22:46
        )

    [1] => classTable Object
        (
            [ID] => 2
            [col1] => セル2-1
            [col2] => セル2-2
            [col3] => セル2-3
            [col4] => 
            [createdate] => 2022-01-24 17:22:46
        )

    [2] => classTable Object
        (
            [ID] => 3
            [col1] => セル3-1
            [col2] => セル3-2
            [col3] => セル3-3
            [col4] => 
            [createdate] => 2022-01-24 17:22:46
        )

)

fetchAll(PDO::FETCH_KEY_PAIR)

サンプルテーブル
ID col1
1 セル1-1
2 セル2-1
3 セル3-1
fetchAllは結果セットから全ての結果行を含む配列を返す取得する。
PDO::FETCH_KEY_PAIRは二つのカラムから1番目をキーに2番目を値にした配列を返す。
カラムが2つ以外のSQLだとエラーになる。
Array
(
    [1] => セル1-1
    [2] => セル2-1
    [3] => セル3-1
)

参考 外部リンク

PDO Statement::fetch(https://www.php.net/manual/ja/pdostatement.fetch.php)
定義済み定数(https://www.php.net/manual/ja/pdo.constants.php)
戻る

全体目次