當前位置: 首頁> 最新文章列表> 使用$errno 捕捉INSERT 重複主鍵錯誤(錯誤號1062)

使用$errno 捕捉INSERT 重複主鍵錯誤(錯誤號1062)

M66 2025-06-02

在PHP 中使用MySQL 數據庫時,插入數據時有可能會遇到一些常見的錯誤。其中之一就是主鍵衝突錯誤,也就是當你嘗試插入一個已經存在的主鍵值時,MySQL 會返回一個錯誤,通常是錯誤號1062。

在使用mysqli擴展時,我們可以通過mysqli::$errno來捕獲這些錯誤。 mysqli::$errno屬性會存儲最近一次MySQL 查詢返回的錯誤號。通過這個屬性,我們可以輕鬆地檢測到主鍵衝突並進行相應的處理。

下面是一個簡單的示例,展示瞭如何在插入數據時捕捉重複主鍵錯誤(錯誤號1062):

示例代碼:

 <?php
// 數據庫連接配置
$servername = "localhost";
$username = "root";
$password = "password";
$dbname = "my_database";

// 創建連接
$conn = new mysqli($servername, $username, $password, $dbname);

// 檢查連接是否成功
if ($conn->connect_error) {
    die("連接失敗: " . $conn->connect_error);
}

// 插入數據的 SQL 語句
$sql = "INSERT INTO users (id, username) VALUES (1, 'new_user')";

// 執行 SQL 查詢
if ($conn->query($sql) === TRUE) {
    echo "新記錄插入成功";
} else {
    // 檢查是否為重複主鍵錯誤(錯誤號 1062)
    if ($conn->errno == 1062) {
        echo "錯誤: 重複的主鍵值。";
    } else {
        echo "錯誤: " . $conn->error;
    }
}

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

代碼解析:

  1. 數據庫連接:首先,我們使用new mysqli()創建數據庫連接。我們提供數據庫的主機名、用戶名、密碼和數據庫名。如果連接失敗,程序將會退出並顯示錯誤信息。

  2. SQL 插入語句:我們編寫了一個簡單的插入語句,將一條新記錄插入到users表中。假設id列是主鍵,並且嘗試插入的id值是1

  3. 執行SQL 查詢:通過$conn->query($sql)執行SQL 插入操作。如果插入成功,返回值為TRUE ,並輸出插入成功的提示信息。

  4. 捕捉錯誤:如果插入失敗(例如主鍵衝突), $conn->errno將會返回一個錯誤號。在這個例子中,我們檢查$conn->errno是否為1062 ,這是MySQL 中重複主鍵錯誤的錯誤號。如果是重複主鍵錯誤,我們輸出特定的錯誤信息:“重複的主鍵值”。如果是其他類型的錯誤,我們將顯示MySQL 返回的錯誤信息。

  5. 關閉連接:操作完成後,我們使用$conn->close()關閉數據庫連接,釋放資源。

小結:

通過使用mysqli::$errno ,我們可以方便地捕捉和處理MySQL 錯誤,尤其是常見的重複主鍵錯誤(錯誤號1062)。這種方式有助於提高程序的健壯性,避免因重複主鍵導致的程序崩潰或錯誤。

如果你還想進一步改進處理邏輯,可以在捕捉到重複主鍵錯誤時採取更合適的操作,例如跳過插入、更新現有記錄,或者返回更詳細的錯誤信息。