web-dev-qa-db-ja.com

PHP PDO-行数

PDOには、選択クエリから返された行数をカウントする手段がないようです(mysqliには_num_rows_変数があります)。

count($results->fetchAll())を使用する以外に、これを行う方法はありますか?

13
Ian

マニュアルによると、 _PDOStatement->rowCount_ メソッドがあります;しかし、それは使用されるべきではありません(quoting)

ほとんどのデータベースでは、PDOStatement::rowCount()SELECTステートメントの影響を受ける行数を返しません。
代わりに、PDO::query()を使用して目的のSELECTステートメントと同じ述語でSELECT COUNT(*)ステートメントを発行してから、PDOStatement::fetchColumn()を使用します返される行数を取得します。
これで、アプリケーションは正しいアクションを実行できます。


すでにレコードセットがあり、その中に何行あるかを知りたい場合は、_fetch*_メソッドの1つを使用してデータをフェッチする必要があります。そして、あなたが提案したように、カウントを使用します。

12
Pascal MARTIN

PDOには、mysqlのselectクエリから返された行数をカウントする手段があるようですが、より重要なのは、そのようなものにはno useがないことです。そもそも関数。

SELECTクエリにrowCount()を使用するというアイデアがあるたびに、それは不必要であるか、有害でさえあります。 PDO rowCount() を参照してください:

  • すでにデータを選択している場合は、データを数えるだけなので、この機能は不要です。
  • この関数を使用してカウントのみを取得する場合は、カウントのみのデータを選択しないでください。有害です。代わりにSELECTcount(*)を使用して、カウントのみを選択します。
3

mysqliの_num_rows_変数および対応するCAPI関数mysql_num_rows()に近い可能性のある別のオプション。 MySQL関数を使用することです FOUND_ROWS() 結果のすべてのレコードを再度カウントすることなく、同じ情報を返します。

例:

_$pdoDB->query('SELECT FOUND_ROWS()')->fetchColumn()
_
0
Angelstam