Из руководства PDO:
PDOStatement:: rowCount() возвращает количество строк, затронутых последним DELETE, INSERT или UPDATEвыполненный соответствующим Объект PDOStatement.
Если последний оператор SQL, выполняемый связанная с этим PDOStatement была SELECT, некоторые базы данных могут вернуть число строк, возвращаемых это утверждение. Однако это поведение не гарантировано для всех базы данных и не следует полагаться на для портативных приложений.
Я нашел это совсем недавно. Я только что изменил слой абстракции db, чтобы больше не использовать SELECT COUNT(1) ...
, потому что просто запрос фактических строк, а затем подсчет результата будет намного более эффективным. И теперь PDO не поддерживает это!?
Я не использую PDO для MySQL и PgSQL, но я делаю это для SQLite. Есть ли способ (без полного изменения dbal back) для подсчета строк, подобных этому в 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)
.