在MySQLi中,將查詢錯誤轉換為異常
P粉060528326
P粉060528326 2023-08-24 11:53:00
0
2
463
<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>
P粉060528326
P粉060528326

全部回覆(2)
P粉420958692

No.

您應該能夠按照您的要求並指示mysqli驅動在SQL錯誤時拋出異常,但如果尚未啟用MYSQLI_REPORT_ERROR,則需要啟用它....

mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT)

mysqli_query()現在應該在錯誤時拋出例外。您不需要檢查失敗的回傳值(無論如何,都會拋出異常)。

public function mysqlQuery($SQL) {
    try {
        $this->Result = mysqli_query($this->DBlink, $SQL);
    } catch (mysqli_sql_exception $e) {
        throw new MySQLiQueryException($SQL, $e->getMessage(), $e->getCode());
    }
    return $this->Result;
}

(注意:我在重新拋出的異常中將$this->SQL更改為$SQL。)

P粉549412038

一段時間前,我成功解決了這個問題。正如在其他答案中指出的那樣,

mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);

是告訴mysqli拋出異常的正確方法。

只需確保不要在每個查詢中都包裹try-catch。這是一個非常常見的誤解,一旦開始使用異常,就應該開始到處拋出try和catch。相反,try-catch應該謹慎使用。雖然99%的錯誤不應該在現場處理,而是由整個站點的錯誤處理程序處理。您可以從我在PHP錯誤報告文章中了解更多相關主題。

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!