为什么这个mysql查询不起作用?

时间:2011-10-22 10:29:03

标签: mysql rowcount

我有这个问题:

$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 个答案:

答案 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