PHP PDO - количество строк

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

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

3 ответа

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

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

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


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

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

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


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

Пример:

$pdoDB->query('SELECT FOUND_ROWS()')->fetchColumn()

licensed under cc by-sa 3.0 with attribution.