Получить количество строк из оператора Select - PullRequest
13 голосов
/ 21 февраля 2010

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

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

Спасибо всем

Ответы [ 2 ]

8 голосов
/ 21 февраля 2010

SELECT count(*) FROM this_table это опция ...

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

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

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

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

5 голосов
/ 21 февраля 2010

Я нашел решение, используя 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 ().

Надеюсь, это кому-нибудь пригодится.

...