У меня есть это:
$dbh = new PDO("odbc:Driver={Microsoft Access Driver (*.mdb, *.accdb)};Dbq=$mdbFilename", $username, $password); $sql = "SELECT * FROM this_table"; $stmt = $dbh->query($sql); //num of rows?
Как получить количество строк, возвращаемых из этой инструкции SELECT?
Спасибо всем
SELECT count(*) FROM this_table
– это опция …
Что касается rowCount:
PDOStatement :: rowCount () возвращает количество строк, затронутых последним оператором DELETE, INSERT или UPDATE, выполняемым соответствующим объектом PDOStatement.
Если последний оператор SQL, выполняемый связанным с ним PDOStatement, был оператором SELECT, некоторые базы данных могут возвращать количество строк, возвращаемых этим оператором. **
Однако это поведение не гарантируется для всех баз данных и не должно полагаться на переносные приложения.
Я нашел решение, используя fetchAll, а затем используя count для этого массива – это то, что MySQL делает в любом случае внутренне, немного неэффективно, но оно работает для меня.
$q = $db->query("SELECT ..."); $rows = $q->fetchAll(); $rowCount = count($rows);
Из другого вопроса Чад представил это понимание:
Кажется, что единственная причина, по которой это возможно в MySQL, – это то, что она внутренне извлекала все строки результатов и буферизовала их, чтобы предоставить вам эту информацию. См. Mysql_unbuffered_query (). Если вы используете эту функцию вместо mysql_query (), функция mysql_num_rows () не будет работать. Если вам действительно нужно знать количество строк при использовании PDO, вы можете получить все строки из PDO в массив, а затем использовать count ().
Надеюсь, это кому-то полезно.