PDOには、選択クエリから返された行数をカウントする手段がないようです(mysqli
には_num_rows
_変数があります)。
count($results->fetchAll())
を使用する以外に、これを行う方法はありますか?
マニュアルによると、 _PDOStatement->rowCount
_ メソッドがあります;しかし、それは使用されるべきではありません(quoting):
ほとんどのデータベースでは、
PDOStatement::rowCount()
はSELECT
ステートメントの影響を受ける行数を返しません。
代わりに、PDO::query()
を使用して目的のSELECT
ステートメントと同じ述語でSELECT COUNT(*)
ステートメントを発行してから、PDOStatement::fetchColumn()
を使用します返される行数を取得します。
これで、アプリケーションは正しいアクションを実行できます。
すでにレコードセットがあり、その中に何行あるかを知りたい場合は、_fetch*
_メソッドの1つを使用してデータをフェッチする必要があります。そして、あなたが提案したように、カウントを使用します。
PDOには、mysqlのselectクエリから返された行数をカウントする手段があるようですが、より重要なのは、そのようなものにはno useがないことです。そもそも関数。
SELECTクエリにrowCount()を使用するというアイデアがあるたびに、それは不必要であるか、有害でさえあります。 PDO rowCount() を参照してください:
mysqli
の_num_rows
_変数および対応するCAPI関数mysql_num_rows()
に近い可能性のある別のオプション。 MySQL関数を使用することです FOUND_ROWS()
結果のすべてのレコードを再度カウントすることなく、同じ情報を返します。
例:
_$pdoDB->query('SELECT FOUND_ROWS()')->fetchColumn()
_