PDO, по-видимому, не имеет возможности подсчитать количество строк, возвращаемых из запроса select (mysqli имеет переменную num_rows).
Есть ли способ сделать это, не используя count($results->fetchAll())?
PDO, по-видимому, не имеет возможности подсчитать количество строк, возвращаемых из запроса select (mysqli имеет переменную num_rows).
Есть ли способ сделать это, не используя count($results->fetchAll())?
Согласно руководству, существует метод PDOStatement->rowCount; но его не следует использовать (цитирование):
Для большинства баз данных,
PDOStatement::rowCount()не вернуть количество строк, на которые влияет aSELECT.
Вместо этого используйтеPDO::query()выдать инструкциюSELECT COUNT(*)с тем же предикаты как ваши предполагаемыеSELECT, затем используйтеPDOStatement::fetchColumn()до получить количество строк, которые будут возвращаться.
Ваше приложение может затем выполните правильное действие.
Если у вас уже есть набор записей и вы хотите знать, сколько строк в нем, вам нужно будет получить данные, используя один из методов fetch*; и используйте count - как вы и предполагали.
Несмотря на то, что PDO, по-видимому, имеет все средства для подсчета количества строк, возвращаемых из запроса select для mysql, более важно то, что для такой функции существует не использовать.
Каждый раз, когда у вас есть идея использовать rowCount() для запроса SELECT, это будет либо лишним, либо даже вредным. См. PDO rowCount():
Другая опция, которая может быть ближе к переменной num_rows в mysqli и соответствующей функции C API mysql_num_rows(). Является использование функции MySQL FOUND_ROWS(), которая возвращает ту же информацию без повторного подсчета всех записей в результате.
Пример:
$pdoDB->query('SELECT FOUND_ROWS()')->fetchColumn()