2011-10-22 113 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

他不是那個意思 –