PDOStatement::fetch の返り値パターンのメモ

PDOStatement::fetchに指定できる各fetch style

PHP: PDOStatement->fetch - Manual

mixed PDOStatement::fetch ([ int $fetch_style = PDO::FETCH_BOTH [, int $cursor_orientation = PDO::FETCH_ORI_NEXT [, int $cursor_offset = 0 ]]] )
PDOStatementオブジェクトに関連付けられた結果セットから1行取得します。 fetch_style パラメータは、PDO がその行をどの様に返すかを決定します。

ドキュメントを読んでも分かりづらいので、下記のfetch_styleについて結果をdumpしたコードを示す。

  • PDO::FETCH_ASSOC
  • PDO::FETCH_BOTH
  • PDO::FETCH_OBJ
  • PDO::FETCH_NUM
  • PDO::FETCH_LAZY

各fetch_styleのdump結果

var_dump($Statement->fetch(PDO::FETCH_ASSOC));
/*
array(3) {
  ["prefecture_code"]=>
  string(2) "11"
  ["prefecture_name"]=>
  string(9) "北海道"
  ["prefecture_area"]=>
  string(18) "東北・北海道"
}
*/

var_dump($Statement->fetch(PDO::FETCH_BOTH));
/*
array(6) {
  ["prefecture_code"]=>
  string(2) "11"
  [0]=>
  string(2) "11"
  ["prefecture_name"]=>
  string(9) "北海道"
  [1]=>
  string(9) "北海道"
  ["prefecture_area"]=>
  string(18) "東北・北海道"
  [2]=>
  string(18) "東北・北海道"
}
*/

var_dump($Statement->fetch(PDO::FETCH_OBJ));
/*
object(stdClass)#15 (3) {
  ["prefecture_code"]=>
  string(2) "11"
  ["prefecture_name"]=>
  string(9) "北海道"
  ["prefecture_area"]=>
  string(18) "東北・北海道"
}
*/

var_dump($Statement->fetch(PDO::FETCH_NUM));
/*
array(3) {
  [0]=>
  string(2) "11"
  [1]=>
  string(9) "北海道"
  [2]=>
  string(18) "東北・北海道"
}
*/

var_dump($Statement->fetch(PDO::FETCH_LAZY));
/*
object(PDORow)#15 (4) {
  ["queryString"]=>
  string(56) "SELECT * FROM map_prefecture WHERE prefecture_code = :id"
  ["prefecture_code"]=>
  string(2) "11"
  ["prefecture_name"]=>
  string(9) "北海道"
  ["prefecture_area"]=>
  string(18) "東北・北海道"
}

*/

オブジェクトで返してくれるPDO::FETCH_OBJはなかなか楽しいかも。配列的な使い勝手を優先するなら、素直にPDO::FETCH_ASSOCでしょうけど。