2011-01-27 109 views
1

我一直在研究一個數據庫包裝類,每隔一段時間服務器就會消失... MySQL的典型2006年錯誤消息。我已經包裝了處理重新連接到數據庫的邏輯,並且似乎正在工作。有趣的是,這個查詢是:如果沒有結果,MySQL SELECT *和LIMIT 1是否返回FALSE?

SELECT id FROM pixel WHERE (id = 522574) AND (advertiser_entity_id = 45574) LIMIT 1 

在PHPMYADMIN中執行該行會產生一個空集。通過數據庫類執行它返回false。

有沒有人看到這種行爲?沒有mysql_errorno或錯誤消息回來。

$result = mysql_query($query, $this->database_connection); 
if (false === $result) { 
// handle error here 
} 
else { return $result; } 
+1

這很可能是因爲你的數據庫類出了錯,因爲像mysql_query這樣的函數總是返回一個MySQL結果,即使沒有結果。 – Lekensteyn 2011-01-27 20:11:13

回答

11

找不到匹配的行不是錯誤。如果它沒有找到符合WHERE條件的記錄,那不是一個錯誤,它只是返回一個空的結果。如果你正在編寫你自己的數據庫層,它也不應該把它當作一個錯誤 - 查詢運行得很好,它只是沒有找到任何匹配。

但是,如果您問,爲什麼您的代碼返回false,這可能僅僅是因爲通常語言在布爾上下文中將零或空值視爲「false」。

+1

謝謝邁克。所以來自MySQL的響應是一個布爾值(FALSE)。我認爲它應該返回一個空集,儘管... mysql_query api文檔說,只有在發生錯誤的情況下它纔會返回false。此外,我用我的代碼更新了我的問題。 – Mike 2011-01-27 20:33:50