當前位置: 首頁> 最新文章列表> 如何用mysqli::$errno 自動識別並測試各種SQL 執行失敗的類型?

如何用mysqli::$errno 自動識別並測試各種SQL 執行失敗的類型?

M66 2025-05-28

在PHP 中使用MySQL 數據庫時,執行SQL 查詢時可能會遇到錯誤。為了方便定位這些錯誤,可以通過mysqli提供的錯誤碼mysqli::$errno來判斷失敗的原因,並進行相應的處理。本文將介紹如何用mysqli::$errno自動識別並測試各種SQL 執行失敗的類型。

1. 了解mysqli::$errno

mysqli::$errno是一個包含最近執行的MySQL 查詢錯誤碼的屬性。它返回一個整數值,用於表示不同類型的錯誤。這對於開發者來說非常有用,可以幫助我們在執行SQL 時定位問題。

通常, mysqli::$errnomysqli::$error配合使用,後者會返回出錯時的錯誤信息,而前者則提供出錯的具體錯誤碼。通過這些信息,可以對SQL 錯誤做出相應的處理。

2. 常見的MySQL 錯誤碼

以下是幾個常見的MySQL 錯誤碼示例及其含義:

錯誤碼錯誤描述
1045 Access denied (無權限訪問)
1064 SQL 語法錯誤
1146表不存在
1054列不存在
1062重複條目(Unique constraint violation)

當你執行SQL 查詢時,可以通過mysqli::$errno檢查這些錯誤碼,並根據錯誤碼做相應的處理。

3. 使用mysqli::$errno處理錯誤

首先,我們需要一個連接到MySQL 數據庫的實例,然後執行SQL 查詢並檢查是否有錯誤發生。以下是一個示例代碼:

 <?php
$mysqli = new mysqli("localhost", "user", "password", "database");

if ($mysqli->connect_error) {
    die("連接失敗: " . $mysqli->connect_error);
}

$query = "SELECT * FROM non_existent_table"; // 故意寫錯的表名
$result = $mysqli->query($query);

if (!$result) {
    // 如果查詢失敗,獲取錯誤碼和錯誤信息
    echo "錯誤碼: " . $mysqli->errno . "<br>";
    echo "錯誤訊息: " . $mysqli->error . "<br>";

    // 根据錯誤碼做不同的处理
    switch ($mysqli->errno) {
        case 1045:
            echo "無權限訪問,請檢查數據庫用戶的權限。";
            break;
        case 1064:
            echo "SQL 語法錯誤,請檢查查詢語法。";
            break;
        case 1146:
            echo "表不存在,請檢查表名。";
            break;
        case 1054:
            echo "列不存在,請檢查列名。";
            break;
        case 1062:
            echo "重複條目,違反唯一約束。";
            break;
        default:
            echo "其他錯誤,請檢查查詢。";
    }
} else {
    // 查詢成功,處理結果
    while ($row = $result->fetch_assoc()) {
        echo "數據: " . $row['column_name'] . "<br>";
    }
}

$mysqli->close();
?>

在上面的代碼中,如果SQL 執行失敗,首先會打印錯誤碼和錯誤信息。然後,根據mysqli::$errno的值,我們通過switch語句判斷錯誤類型,並提供具體的錯誤提示。

4. 使用mysqli::$errno進行錯誤測試

你可以通過故意引入錯誤來測試mysqli::$errno的效果。例如,可以嘗試以下幾種常見錯誤:

  • 錯誤的表名:當查詢表不存在時,MySQL 會返回錯誤碼1146 (表不存在)。

  • 錯誤的SQL 語法:語法錯誤通常返回1064錯誤碼。

  • 權限問題:如果數據庫用戶沒有足夠的權限,則返回錯誤碼1045

測試時,你可以修改SQL 查詢語句來觸發這些錯誤,並通過mysqli::$errno獲取相應的錯誤碼。

5. 示例:結合URL 測試失敗的SQL 查詢

在一些複雜的SQL 查詢中,可能會涉及到使用URL 或外部數據源。如果查詢中涉及到外部資源,我們可以使用類似下面的方式來檢查URL 是否有效:

  • 相關標籤:

    SQL