1 回答

TA貢獻1795條經驗 獲得超7個贊
有時您的查詢失敗,您不知道原因。因此,配置PHP和mysqli以報告每個錯誤非常重要。
如何在mysqli中獲取錯誤消息
首先,MySQLi在所有環境中連接之前總是有這條線:
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
之后,所有MySQL錯誤都將轉移到PHP異常中。反過來,未捕獲的異常會導致PHP致命錯誤。因此,如果出現MySQL錯誤,您將收到傳統的PHP錯誤。這將立即讓您意識到錯誤原因。堆棧跟蹤將引導您到達發生錯誤的確切位置。
如何在不同的環境中配置PHP
以下是我關于PHP錯誤報告的文章的要點:
請注意,您必須能夠查看PHP錯誤。這確實是不同環境的問題:
您必須將相應的配置選項設置為以下值
在開發服務器上
error_reporting
應該設置為E_ALL
值;display_errors
應設為1在生產服務器上
error_reporting
應該設置為E_ALL
值;display_errors
應設為0log_errors
應設為1
如何實際使用它?
只是刪除了錯誤手動檢查任何代碼,所有這些or die()
,if ($result)
和這樣的。只需立即編寫數據庫交互代碼即可
$stmt = $this->con->prepare("INSERT INTO table(name, quantity) VALUES (?,?)");$stmt->bind_param("si", $name, $quantity);$stmt->execute();
再次,witohut周圍的任何條件。如果發生錯誤,則會將其視為代碼中的任何其他錯誤。例如,在開發PC上,它只會出現在屏幕上。對于實時網站,您將需要一個錯誤包裝,但這是一個不同的故事,與mysqli及其錯誤完全無關。
如何處理您收到的錯誤消息
收到錯誤消息后,您必須閱讀并理解它。這聽起來太明顯了,但學習者經常忽略錯誤信息的極端有用性。但大多數時候它解釋這個問題非常簡單。比如,如果它說特定表不存在,則必須檢查拼寫,拼寫錯誤,字母大小寫,憑證等?;蛘撸绻fSQL語法中存在錯誤,那么您必須檢查SQL。問題點就在錯誤消息中引用的查詢部分之前。
您還必須信任該錯誤消息。如果它說令牌的數量與綁定變量的數量不匹配那么它就是這樣。缺席的表或列也是如此。鑒于選擇,無論是你自己的錯誤還是錯誤信息是錯誤的,總是堅持前者。它再次聽起來居高臨下,但在這個網站上的數百個問題證明這個建議非常有用。
關于錯誤報告的不應該做的清單
使用錯誤抑制運算符(
@
)使用
die()
或echo
或任何其他功能無條件地在屏幕上打印錯誤消息。PHP可以很好地回應它,不需要任何幫助。手動測試查詢結果(如
if($result)
)只是沒有意義。您的查詢失敗并且您已經獲得了錯誤異常,或者它沒有問題,也沒有什么可以測試的。使用try..catch回顯錯誤消息。PHP可以做得更好,更好。
添加回答
舉報