Получить количество строк из оператора Select

У меня есть это:

$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?

Спасибо всем

Ответы

Ответ 1

Я нашел решение, используя fetchAll, а затем используя count для этого массива - это то, что MySQL делает в любом случае внутренне, немного неэффективно, но оно работает для меня.

$q = $db->query("SELECT ...");
$rows = $q->fetchAll();
$rowCount = count($rows);

Из другого вопроса Chad предоставлено это понимание:

Кажется, что единственная причина это было возможно с MySQL потому что он внутренне выбирал все результирующие строки и буферизировать их, чтобы в состоянии дать вам эту информацию. Видеть mysql_unbuffered_query(). Если вы используете эта функция вместо mysql_query(), mysql_num_rows() функция не будет работать. Если вы действительно нужно знать количество строк в то время как используя PDO, вы можете получить все строки из PDO в массив, а затем используйте count().

Надеюсь, что это кому-то полезно.

Ответ 2

SELECT count(*) FROM this_table - это вариант...

Относительно rowCount:

PDOStatement:: rowCount() возвращает количество строк, затронутых последним оператором DELETE, INSERT или UPDATE, выполняемым соответствующим объектом PDOStatement.

Если последний оператор SQL, выполняемый связанным PDOStatement, был оператором SELECT, некоторые базы данных могут возвращать количество строк, возвращаемых этим оператором. **

Однако это поведение не гарантируется для всех баз данных и не должно полагаться на переносные приложения.