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 () :
Другая опция, которая может быть ближе к переменной num_rows в mysqli и соответствующей функции API C mysql_num_rows() . Является использование функции MySQL FOUND_ROWS() которая возвращает ту же информацию без повторного подсчета всех записей в результате.
Пример:
$pdoDB->query('SELECT FOUND_ROWS()')->fetchColumn()