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

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

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

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

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

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

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

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

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

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

Пример:

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