Из руководства по PDO:
PDOStatement :: rowCount () возвращает
количество строк , затронутых последним
оператор DELETE, INSERT или UPDATE
выполнено соответствующим
PDOStatement объект.
Если последний оператор SQL выполнен
соответствующее PDOStatement было
оператор SELECT , некоторые базы данных могут
вернуть количество строк, возвращаемых
это утверждение . Тем не менее, это
поведение не гарантировано для всех
базы данных и на них нельзя полагаться
для портативных приложений.
Я узнал об этом только недавно. Я только что изменил свой слой абстракции БД, чтобы он больше не использовал SELECT COUNT(1) ...
, потому что просто запрос реальных строк и затем подсчет результата будет намного более эффективным. И теперь PDO не поддерживает это!?
Я не использую PDO для MySQL и PgSQL, но я использую для SQLite. Есть ли способ (без полного изменения обратно dbal) подсчитывать строки в PDO? В MySQL это будет примерно так:
$q = $db->query('SELECT a, b, c FROM tbl WHERE oele = 2 GROUP BY boele');
$rows = $q->num_rows;
// and now use $q to get actual data
С драйверами MySQLi и PgSQL это возможно. Со всеми PDO это не так!?
PS. Моим первоначальным решением было расширить метод SQLResult-> count (мой собственный), чтобы заменить SELECT ... FROM
на SELECT COUNT(1) FROM
и просто вернуть это число (очень неэффективно, но только для SQLite PDO). Это не достаточно хорошо, потому что в приведенном выше примере запроса есть GROUP BY
, который изменит значение / функцию COUNT(1)
.