Из руководства PDO:
PDOStatement :: rowCount () возвращает количество строк , затронутых последним инструкция DELETE, INSERT или UPDATE исполняется соответствующими PDOStatement объект.
Если последний оператор SQL, выполненный связанное состояние PDOS было оператор 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)
.