當前位置: 首頁> 最新文章列表> 如何在自定義錯誤處理器中使用mysqli::$errno 來處理MySQL 錯誤?

如何在自定義錯誤處理器中使用mysqli::$errno 來處理MySQL 錯誤?

M66 2025-07-18

在PHP 中,我們常常需要與數據庫進行交互,尤其是使用MySQL 數據庫時, mysqli擴展是非常常見的選擇。然而,當我們遇到數據庫連接錯誤或查詢錯誤時,需要有合適的方式來處理這些錯誤。 mysqli::$errnomysqli類中的一個重要屬性,它返回與MySQL 最後一次錯誤相關的錯誤代碼。本文將介紹如何在自定義錯誤處理器中使用mysqli::$errno來處理MySQL 錯誤。

1. 自定義錯誤處理器

PHP 提供了set_error_handler()函數來設置自定義的錯誤處理器。我們可以通過這個方法捕獲和處理錯誤。在使用mysqli連接和查詢MySQL 數據庫時,若發生錯誤, mysqli::$errno可以幫助我們判斷錯誤類型,並據此進行特定的錯誤處理。

2. 使用mysqli::$errno來捕獲MySQL 錯誤

mysqli::$errno返回一個整數值,表示上一個MySQL 操作的錯誤代碼。如果沒有錯誤發生,它將返回0 。若返回其他值,則表示發生了錯誤。結合自定義錯誤處理器,我們可以根據錯誤代碼進行分類處理,例如:記錄日誌、顯示錯誤信息或進行重試等操作。

3. 示例代碼

下面是一個使用mysqli::$errno來處理MySQL 錯誤的示例。我們將設置一個自定義錯誤處理器,並在數據庫連接和查詢中使用mysqli::$errno來檢查錯誤。

 <?php
// 設置自定義錯誤處理器
set_error_handler("customErrorHandler");

function customErrorHandler($errno, $errstr, $errfile, $errline) {
    // 檢查 MySQL 錯誤代碼
    if ($errno == E_USER_WARNING) {
        echo "MySQL Error [$errno]: $errstr\n";
    } else {
        echo "Error [$errno]: $errstr in $errfile on line $errline\n";
    }
}

// 創建數據庫連接
$mysqli = new mysqli("localhost", "username", "password", "database_name");

// 檢查连接是否成功
if ($mysqli->connect_errno) {
    trigger_error("Failed to connect to MySQL: " . $mysqli->connect_error, E_USER_WARNING);
    exit();
}

// 執行查詢
$query = "SELECT * FROM non_existent_table";
$result = $mysqli->query($query);

// 檢查查询是否成功
if (!$result) {
    trigger_error("MySQL Query Error: " . $mysqli->error, E_USER_WARNING);
}

// 關閉連接
$mysqli->close();
?>

4. 代碼解析

  • 在上面的代碼中,我們首先使用set_error_handler()函數設置了一個名為customErrorHandler的自定義錯誤處理器。

  • 如果MySQL 連接失敗(如數據庫服務器不可用),會通過mysqli->connect_errno獲取連接錯誤代碼,並通過trigger_error()將錯誤信息傳遞給自定義錯誤處理器。

  • 同樣地,如果查詢執行失敗,我們可以通過mysqli->error獲取錯誤信息,並觸發一個警告( E_USER_WARNING ),由自定義錯誤處理器捕獲。

  • 自定義錯誤處理器會打印錯誤代碼和信息,幫助開發者定位問題。

5. 處理MySQL 錯誤代碼

mysqli::$errno不僅能返回錯誤代碼,還可以結合MySQL 的錯誤代碼文檔,幫助我們定位具體問題。例如,如果錯誤代碼是1064 ,這意味著SQL 語法錯誤;如果錯誤代碼是1045 ,這意味著數據庫認證失敗。

6. 替換URL 域名

當你在代碼中需要處理與URL 相關的錯誤時,可以使用mysqli::$errno來捕獲並替換URL 中的域名。例如,如果你在代碼中發現了與數據庫操作相關的錯誤,並希望替換域名為m66.net ,你可以按以下方式修改URL: