PHP PDO - Num Rows - PullRequest
       34

PHP PDO - Num Rows

13 голосов
/ 23 апреля 2010

PDO, по-видимому, не имеет средств для подсчета количества строк, возвращаемых запросом выбора (mysqli имеет переменную num_rows)

Есть ли способ сделать это, кроме использования count($results->fetchAll())?

Ответы [ 4 ]

12 голосов
/ 23 апреля 2010

Согласно руководству, существует метод PDOStatement->rowCount;но его не следует использовать (цитирование) :

Для большинства баз данных PDOStatement::rowCount() не возвращает количество строк, затронутых оператором SELECT.
Вместо этого используйте PDO::query(), чтобы выдать оператор SELECT COUNT(*) с теми же предикатами, что и предполагаемый оператор SELECT, затем используйте PDOStatement::fetchColumn(), чтобы получить количество строк, которые будут возвращены.
Ваше приложение может затем выполнить правильное действие.


Если у вас уже есть набор записей, и вы хотите знать, сколько в нем строк, вам придется извлечь данныеиспользуя один из методов fetch*;и используйте количество - как вы предложили.

3 голосов
/ 05 апреля 2014

Хотя PDO, очевидно, имеет все средства для подсчета количества строк, возвращаемых из запроса на выборку для mysql, более важно то, что не используется для такой функции.

Каждый раз, когда у вас появляется идея использовать rowCount () для запроса SELECT, это будет излишним или даже вредным. См. PDO rowCount () :

  • в случае, если у вас уже выбраны данные, эта функция излишня, поскольку вы просто можете считать данные
  • Если вы хотите использовать эту функцию только для подсчета, это будет вредно, так как вы никогда не должны выбирать данные только для подсчета. Выберите только количество, используя вместо этого значение SELECT (*).
0 голосов
/ 28 марта 2018

Самый легкий

  $stmt = $datalink->query('SELECT * FROM projects');
  $rows = $stmt->fetchAll();
  $num_rows = count($rows);
  echo $num_rows ;
0 голосов
/ 04 апреля 2014

Другая опция, которая может быть ближе к переменной num_rows в mysqli и соответствующей функции C API mysql_num_rows(). Использовать функцию MySQL FOUND_ROWS(), которая возвращает ту же информацию без необходимости повторного подсчета всех записей в результате.

Пример:

$pdoDB->query('SELECT FOUND_ROWS()')->fetchColumn()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...