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