PHP PDO rowCount возвращает -1 в операторе SELECT

У меня странная проблема, которая била меня по спине целый день.

У меня есть следующий код:

$today = date("m/d/Y");
$sql = "SELECT * FROM msgs WHERE is_errata = 0 AND kill_date >= '$today' AND msg_date <= '$today' ORDER BY msg_date";
$ps = $pdo->prepare($sql);
if (!$ps) {
echo "PDO::errorInfo():";
print_r($pdo->errorInfo());
}else{
$ps->execute();
$number_of_rows = $ps->rowCount();

Когда я отображаю значение $ number_of_rows, оно ВСЕГДА отображает -1, даже когда я получаю результаты.

У кого-то еще есть такая проблема?

О, и база данных, которую я использую, НЕ MySQL, а прекрасный MS Access. Я подозреваю, что это может быть проблемой.

0

Решение

rowCount() метод НЕ возвращает количество строк из SELECT заявление. Это распространенная ошибка.

PDOStatement :: ROWCOUNT () возвращает количество строк, затронутых
последний оператор DELETE, INSERT или UPDATE, выполненный соответствующей
PDOStatement объект.
Если последний оператор SQL, выполненный связанным PDOStatement, был
оператор SELECT, некоторые базы данных могут возвращать количество строк
возвращается этим утверждением. Тем не мение, такое поведение не гарантируется
для всех баз данных и не следует полагаться на портативные
Приложения.

Более подробную информацию вы можете найти в документация.

Таким образом, чтобы получить количество строк, вы должны написать SELECT заявление с sql COUNT(*) функция. В твоем случае:

$sql = "SELECT COUNT(*) AS `count` FROM msgs WHERE is_errata = 0 AND kill_date >= '$today' AND msg_date <= '$today' ORDER BY msg_date";

или используя PHP:

$number_of_rows = count($ps->fetchAll());

Вы также должны научиться правильно составлять запрос.

1

Другие решения

Вы должны использовать iterator_count считать строки, т.е.

$number_of_rows = iterator_count($ps);
-1

По вопросам рекламы [email protected]