如何停用 PHP 報告 SQL 錯誤?
P粉550257856
2023-09-05 17:14:24
<p>我有自己的 PHP 資料類,它使用 <code>mysqli_error($this->conn) 將 MySQL 錯誤記錄到 txt 檔案</code></p>
<p>一切都正常,直到我將 PHP 錯誤處理設定為 E_ALL。現在 PHP 攔截了錯誤,而且它沒有機會被我的 MySQL 錯誤處理程序處理。 </p>
<p>這不會是一個問題,除非 PHP 不記錄出錯的完整 SQL 字串。它僅記錄前 20 個字元左右,後面跟著“...”,這對於調試來說不是很有用。 </p>
<p>所以我的問題是:可以告訴 PHP 忽略 MySQL 錯誤,同時仍處理 PHP 錯誤? </p>
<p>我已經查看了 error_reporting() 的各個級別,但似乎沒有任何內容專門留下 MySQL 錯誤。 </p>
您可以透過停用 mysqli 錯誤報告來做到這一點,但任何常規項目都不應該這樣做。事實上,看來您正在以錯誤的方式解決這個問題!您不應該想要停用錯誤報告,您應該修復錯誤!
正如您所提到的,如果錯誤來自錯誤建構的動態 SQL 語句,那麼您的程式碼不應包含任何邏輯來處理這種可能的情況,因為您不想讓錯誤成為設計的一部分。就像其他錯誤一樣,這是 PHP 程式碼中的一個錯誤。它本身表現為 MySQL 錯誤這一事實是無關緊要的。您必須修復建置無效 SQL 語句的程式碼! 沉默錯誤無助於修復錯誤!
假設您的PHP 程式碼從常數SQL 部分建立SQL(如果它使用變量,那麼您的程式碼中就會出現更大的問題),那麼您的任務是確定哪個程式碼路徑導致SQL 關鍵字的不正確組合。您可以從 SQL 錯誤部分推斷出這一點。異常訊息將告訴您語法錯誤是什麼。如果 MySQL 錯誤與損壞的語法無關,則過程仍然類似:找到導致錯誤的原因並修復它。
不要在 SQL 程式碼周圍編寫特殊的錯誤處理邏輯。這很混亂,而且絕對沒有必要。