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()