我有这个问题:
$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为什么会这样?
答案 0 :(得分:3)
来自Manual
PDOStatement-> rowCount - 返回受影响的行数 最后一条SQL语句
PDOStatement :: rowCount()返回受影响的行数 最后 DELETE,INSERT或UPDATE 语句由相应的执行 PDOStatement对象。
查看此example
并写清楚
对于大多数数据库,PDOStatement :: rowCount()不返回 受SELECT语句影响的行数。相反,使用 PDO :: query()发出带有相同的SELECT COUNT(*)语句 将谓词作为预期的SELECT语句,然后使用 PDOStatement :: fetchColumn()来检索将要的行数 被退回。
答案 1 :(得分:2)
IMHO rowCount()仅匹配UPDATE和DELETE语句,而不匹配SELECT查询。通过选择*,您可以从数据库中获取所有数据。由于您只需要行数,所以请使用count() - 函数 - 这样效率会更高。
SELECT count(*) FROM mailbox WHERE msgTo = ? && read = 0