2009-12-17 109 views
0

我一直在用PHP和MySQL開發一個Web應用程序。有一天,我對數據庫進行了一些更改,並將一個頁面改爲新的表格佈局,而不是另一個頁面。我沒有足夠好的測試,所以網站上線,錯誤仍然在另一頁。這是一個簡單的MySQL錯誤,一旦我的一位同事發現它,這是一個簡單的修復。PHP:MySQL錯誤掛鉤?

現在,它發生了,我想知道我怎麼能趕上其他MySQL錯誤。我在考慮某種通知系統,當mysql_query()失敗時會向我發送電子郵件。

當然,我明白,直到發生錯誤後我纔會得到通知,但至少我會立即得到通知,而不是我的同事過來告訴我誰知道後多少其他人也遇到了同樣的致命錯誤。

是否有某種方式來放入鉤子,以便PHP在發生錯誤時自動運行一個函數?或者我需要通過我的代碼並將此功能添加到我使用mysql_query()的每個位置?

如果是後者,你有什麼建議如何防止在未來這樣的事情?如果是這種情況,我可能會創建一個類來抽象SQL操作。我知道我應該一直這樣做......但是我確實把我的功能集合到了不同的包含文件中,所以至少我做的大部分事情都是正確的。對?

回答

2

你可以使用一個包裝函數這樣的:

function mysql_query_wrapper($query, $link=null) 
{ 
    if (is_null($link)) { 
     $result = myql_query($query); 
    } else { 
     $result = myql_query($query, $link); 
    } 
    if (mysql_error($result)) { 
     // error occurred 
    } 
    return $result; 
} 

然後你只需要mysql_query_wrapper更換每個mysql_query通話。

+0

Thanks and sorry @佩卡,我希望我可以將你的答案都標記爲已接受。我想你們都給了我全面的答案和解決方案! – Ricket 2009-12-17 15:31:32

2

您可以使用自定義函數進行錯誤處理,使用set_error_handler()

但是,mysql_query不會觸發錯誤,但返回錯誤。只有在嘗試處理結果時纔會出現錯誤。在這種情況下,定義一個自定義包裝函數可能會更好,該函數調用mysql_query()並使用mysql_error()輸出可能的錯誤。這樣,如果需要,您可以立即停止應用程序出錯。

+0

實際上,不是輸出錯誤,而是處理所有事情的一個好方法是a)單點執行查詢b)設置set_error_handler()來處理其餘的案例 – 2009-12-17 15:15:45