在MySQLi中,將查詢錯誤轉換為異常
P粉060528326
2023-08-24 11:53:00
<p>我正在嘗試將MySQLi查詢錯誤轉換為異常,但無法實現 - 只有在連接資料庫失敗時才會拋出mysqli_sql_exception異常。 </p>
<p>我使用了<code>mysqli_report(MYSQLI_REPORT_STRICT)</code>和嵌入到自訂包裝類別中的過程式MySQLi函數。 </p>
<p><strong>以前的程式碼:</strong></p>
<pre class="brush:php;toolbar:false;">public function mysqlQuery($SQL) {
$this->Result = mysqli_query($this->DBlink, $SQL);
if($this->Result === false)
throw new MySQLiQueryException($SQL, mysqli_error($this->DBlink), mysqli_errno($this->DBlink));
return $this->Result;
}</pre>
<p><strong>問題:</strong>當查詢失敗時沒有警告或異常被拋出,這是正常的嗎?所以我必須檢查mysqli_query()是否回傳false? </p>
No.
您應該能夠按照您的要求並指示mysqli驅動在SQL錯誤時拋出異常,但如果尚未啟用
MYSQLI_REPORT_ERROR
,則需要啟用它....mysqli_query()
現在應該在錯誤時拋出例外。您不需要檢查失敗的回傳值(無論如何,都會拋出異常)。(注意:我在重新拋出的異常中將
$this->SQL
更改為$SQL
。)一段時間前,我成功解決了這個問題。正如在其他答案中指出的那樣,
是告訴mysqli拋出異常的正確方法。
只需確保不要在每個查詢中都包裹try-catch。這是一個非常常見的誤解,一旦開始使用異常,就應該開始到處拋出try和catch。相反,try-catch應該謹慎使用。雖然99%的錯誤不應該在現場處理,而是由整個站點的錯誤處理程序處理。您可以從我在PHP錯誤報告文章中了解更多相關主題。