MW211 EXIT

devlog
PDO/fetch()とfetchAll()
2011年11月09日
PDOには、「fetch()」という一件だけ読み込むメソッドと
「fetchAll()」という一気に全件読み込むメソッドがある。

で、以下はほぼ等価(「foreach()」の「$row」を「&$row」にすれば尚更)
┌──────────────────────────────────────┐
│while ($row = $sth->fetch(PDO::FETCH_ASSOC)) {                              │
│  :                                                                        │
│}                                                                           │
├──────────────────────────────────────┤
│foreach ($sth->fetchAll(PDO::FETCH_ASSOC) as $row) {                        │
│  :                                                                        │
│}                                                                           │
└──────────────────────────────────────┘
#前提条件とかはあんまり気にせず「$sth->execute();」とかを
  実行した直後だと思ってください。

該当全件を読み込んで処理をするというのは結構多発する処理なので
どっちにするか悩むところかも。

ただ後者だと、以下みたいに関数化(メソッド化)して分離できるからいいかも。
┌──────────────────────────────────────┐
│function get() {                                                            │
│  :                                                                        │
│  return $sth->fetchAll(PDO::FETCH_ASSOC);                                  │
│}                                                                           │
│- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - │
│foreach ($this->get() as $row) {                                            │
│  :                                                                        │
│}                                                                           │
└──────────────────────────────────────┘

たいていは「fetch()」的な関数(「mysql_fetch_assoc()」とか)から
入る(経験する)ので、「fetchAll()」は上級編なのかも。
分類:PDO