PDOはfetchModeを指定してデータを扱いやすい形に変換することができる。
fetchModeのデフォルトは$PDO::FETCH_BOTH
に設定されている。
今回は下記5つについて表示させてみる。
- FETCH_BOTH
- FETCH_COLUMN
- FETCH_CLASS
- FETCH_INTO
- FETCH_ASSOC
下記のようなデータをそれぞれのfetchModeでフェッチして表示させてみた。
nyc=# SELECT * FROM pdo_study;
id | name
----+--------
1 | りんご
2 | みかん
(2 行)
// $stmt->setFetchMode(PDO::FETCH_BOTH);
// これがデフォルト
array(4) {
["id"]=>
int(1)
[0]=>
int(1)
["name"]=>
string(9) "りんご"
[1]=>
string(9) "りんご"
}
array(4) {
["id"]=>
int(2)
[0]=>
int(2)
["name"]=>
string(9) "みかん"
[1]=>
string(9) "みかん"
}
// $stmt->setFetchMode(PDO::FETCH_COLUMN, 1);
// 第二引数はカラム番号
string(9) "りんご"
string(9) "みかん"
// $stmt->setFetchMode(PDO::FETCH_CLASS, 'stdClass');
object(stdClass)#3 (2) {
["id"]=>
int(1)
["name"]=>
string(9) "りんご"
}
object(stdClass)#5 (2) {
["id"]=>
int(2)
["name"]=>
string(9) "みかん"
}
// $stmt->setFetchMode(PDO::FETCH_INTO, $obj);
// 今回は適当なTest Classを作成した
object(Test)#3 (1) {
["cols":protected]=>
array(2) {
["id"]=>
int(1)
["name"]=>
string(9) "りんご"
}
}
object(Test)#3 (1) {
["cols":protected]=>
array(2) {
["id"]=>
int(2)
["name"]=>
string(9) "みかん"
}
}
// $stmt->setFetchMode(PDO::FETCH_ASSOC);
array(2) {
["id"]=>
int(1)
["name"]=>
string(9) "りんご"
}
array(2) {
["id"]=>
int(2)
["name"]=>
string(9) "みかん"
}
デフォルト状態はなんとも使いづらい(なぜこれがデフォルト・・?)ので、いつもはPDO::FETCH_CLASSにして使っています。