2011-10-22 101 views
0

我有这个疑问:为什么这个mysql查询不起作用?

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

现在在我的表我有

msgTo = 1, read = 0 

$用户[ '身份证']等于

但行数返回0为什么是这样?

+0

'&&'?在SQL查询?真? – Lukman

+0

是的,它在PDO中有效 – PHP

+0

rowCount不保证与select一起使用。 –

回答

3

Manual

PDOStatement-> rowCount时 - 返回受 最后一个SQL语句

PDOStatement对象:: rowCount时(行数)返回受影响的行数由 最后DELETE,INSERT或UPDATE对应执行的语句 PDOStatement对象。

看到这个example,并明确

书面对于大多数数据库,PDOStatement对象:: rowCount时()不返回 数量的影响SELECT语句行。相反,使用 PDO :: query()发出一个SELECT COUNT(*)语句,其谓词与您预期的SELECT语句相同,然后使用 PDOStatement :: fetchColumn()来检索将返回 的行数。

+0

好吧将尝试这一点,谢谢 – PHP

+0

请参阅示例,并阅读手册。最好的教训是你自己学习的。 :) – diEcho

+0

我有其他的SELECT语句与rowcount,他们成功执行?为什么是这样? – PHP

2

恕我直言rowCount()只匹配UPDATE和DELETE语句而不匹配SELECT查询。通过选择*,您可以从数据库中获取所有数据。由于您只需要行数,因此使用count()函数 - 效率更高。

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

不使用&&是有效的。 – PHP

+0

更改使用了COUNT函数,而不是选择所有行并对它们进行计数。如果你实际上没有使用这些数据,并且你只想知道有多少行,那么计数比实际提取所有数据的效率高得多。 – Corbin

+0

他不是那个意思 –