Почему этот запрос MySQL не работает? - PullRequest
0 голосов
/ 22 октября 2011

У меня есть этот запрос:

$q = $dbc -> prepare("SELECT * FROM mailbox WHERE msgTo = ? && read = 0");
$q -> execute(array($user['id']));
$mailboxCount = $q -> rowCount();

Теперь у меня в таблице

msgTo = 1, read = 0

$ user ['id'] равно 1

Но количество строк возвращает 0, почему это так?

Ответы [ 2 ]

3 голосов
/ 22 октября 2011

из Manual

PDOStatement-> rowCount - Возвращает количество строк, затронутых последним оператором SQL

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

СМ. example и написано ясно

Для большинства баз данных PDOStatement :: rowCount () не возвращает количество строк, затронутых оператором SELECT.Вместо этого используйте PDO :: query (), чтобы выдать инструкцию SELECT COUNT (*) с теми же предикатами, что и предполагаемый оператор SELECT, а затем используйте PDOStatement :: fetchColumn (), чтобы получить количество строк, которые будут возвращены.

2 голосов
/ 22 октября 2011

IMHO rowCount () соответствует только для операторов UPDATE и DELETE, но не для запросов SELECT. Выбрав *, вы получите все данные из базы данных. Поскольку вам нужно только количество строк, используйте вместо этого функцию count (), что гораздо эффективнее.

SELECT count(*) FROM mailbox WHERE msgTo = ? && read = 0
...