在闡述yasaluyari
的答案,我要堅持這樣的事情:
我們只要修改我們的mysql_query如下:
function mysql_catchquery($query,$emsg='Error submitting the query'){
if ($result=mysql_query($query)) return $result;
else throw new Exception($emsg);
}
現在我們可以簡單地使用它,像這樣,一些很好的例子:
try {
mysql_catchquery('CREATE TEMPORARY TABLE a (ID int(6))');
mysql_catchquery('insert into a values(666),(418),(93)');
mysql_catchquery('insert into b(ID, name) select a.ID, c.name from a join c on a.ID=c.ID');
$result=mysql_catchquery('select * from d where ID=7777777');
while ($tmp=mysql_fetch_assoc($result)) { ... }
} catch (Exception $e) {
echo $e->getMessage();
}
說明它是多麼美麗。每當有任何QQ失敗,我們gtfo與我們的錯誤。而且你還可以注意到,我們現在不需要爲編寫查詢的狀態存儲到用於驗證的$result
變量,因爲我們的函數現在自己處理吧。同樣,它處理選擇,它只是將結果賦值給一個變量,就像正常函數一樣,但是卻處理了它本身的錯誤。
另外請注意,我們不需要顯示實際的錯誤,因爲他們承受巨大的安全隱患,尤其如此這種過時的擴展。這就是爲什麼我們的默認情況在大多數情況下都會很好。但是,如果我們想要通知用戶某些特定的查詢錯誤,我們總是可以傳遞第二個參數來顯示我們的自定義錯誤消息。
關於使用「或死」:http://www.phpfreaks.com/blog/or-die-must-die – outis 2009-12-17 00:55:14
至於異常與檢查返回值,它取決於有多少點可能會產生錯誤。有一點或兩點,我會去錯誤檢查,因爲它更高性能,並在這種情況下可讀性。一旦您在代碼塊中進行了三次或更多次錯誤檢查,異常變得更具可讀性。這是關於減少圈複雜度。請注意,這涵蓋了您處理錯誤的點;如果你在談論信號錯誤,你會得到不同的指導方針。 – outis 2009-12-17 00:59:57