MW211 EXIT

devlog
PDO/件数を取得する方法
2011年11月11日
「SELECT 列 FROM 表 WHERE 条件;」みたいな元SQL文があるとして、
その件数を取得したい場合がある。

ま、単純にはこんな感じで囲ってやれば、
たいていの場合は対応できる(元SQLにDISTINCTとかが絡んでてもOK)のだけど…。
┌──────────────────────────────────────┐
│SELECT COUNT(*) FROM (SELECT 列 FROM 表 WHERE 条件) AS dummy;               │
└──────────────────────────────────────┘

でも、単に件数を取得するだけのためにいちいちSQL文を作成したくはない。
そんなのPDOでなんとかしてくれないの、ってことで代替案。
#例によって「$sth->execute();」の直後の処理って想定でお話を進めます

Countというキーワードを元に「columnCount()」ってメソッドにぶち当たったのだが
これは単にSELECT文に指定した列数を取得するっていう、畑違いのメソッドだった。

さて、気を取り直して大本命の「rowCount()」ってメソッド。
┌──────────────────────────────────────┐
│$count = $sth->rowCount();                                                  │
└──────────────────────────────────────┘
でもこれって、「INSERT、UPDATE、DELETE」といった更新系処理の実行件数であり
「SELECT」の件数としてはあいまいな感じの扱いなのだ。
#どうやら、読み込み完了前に件数を算定する恐れがあるっぽいみたい

ま、信頼性が低いのであれば致し方ない。
ってことで、結論としては「fetchAll()」メソッドで全件取得しちゃって、
「count()」関数で数えちゃえばってことになりました。
┌──────────────────────────────────────┐
│$count = count($sth->fetchAll());                                           │
└──────────────────────────────────────┘
これでもコーディング量的には前出の「rowCount()」メソッドと比べても
そんなに大差ないのでいいのではないでしょうか
分類:PDO