當前位置: 首頁> 最新文章列表> 用$errno 與mysqli_stmt 結合判斷預處理語句是否失敗

用$errno 與mysqli_stmt 結合判斷預處理語句是否失敗

M66 2025-06-05

在使用PHP 進行數據庫操作時,預處理語句提供了一種安全的方式來防止SQL 注入攻擊。使用mysqli擴展,你可以通過mysqli_stmt對象來執行預處理語句。而在執行預處理語句時,有時需要判斷語句是否成功執行。 mysqli::$errnomysqli_stmt是我們判斷執行失敗的有力工具。

本文將介紹如何使用這兩者來判斷預處理語句是否執行失敗,並提供相應的代碼示例。

1. 什麼是mysqli::$errnomysqli_stmt

  • mysqli::$errno :這是一個mysqli類的屬性,它返回最後一次MySQL 操作中出現的錯誤代碼。如果沒有錯誤發生,該值將為0

  • mysqli_stmt :這是mysqli擴展提供的一個類,表示一個預處理語句。你可以通過該類執行SQL 查詢,並傳遞參數。

通過這兩個工具,你可以在執行SQL 查詢後,檢查是否發生了錯誤,從而處理相關的異常情況。

2. 使用mysqli::$errno判斷是否有錯誤

首先,我們來看看如何使用mysqli::$errno來判斷數據庫操作是否失敗。

 <?php
// 連接到數據庫
$mysqli = new mysqli('localhost', 'username', 'password', 'database_name');

// 檢查連接是否成功
if ($mysqli->connect_error) {
    die("Connection failed: " . $mysqli->connect_error);
}

// 編寫預處理語句
$stmt = $mysqli->prepare("SELECT * FROM users WHERE email = ?");

// 檢查預處理語句是否成功
if ($stmt === false) {
    die("Prepare failed: " . $mysqli->errno . " - " . $mysqli->error);
}

// 綁定參數
$email = 'test@example.com';
$stmt->bind_param('s', $email);

// 執行語句
$stmt->execute();

// 檢查執行是否成功
if ($stmt->errno) {
    echo "Error occurred: " . $stmt->errno . " - " . $stmt->error;
} else {
    echo "Query executed successfully!";
}

// 關閉語句和連接
$stmt->close();
$mysqli->close();
?>

3. 解釋代碼

  • 我們首先連接到MySQL 數據庫,若連接失敗,則通過$mysqli->connect_error檢查錯誤。

  • 然後,我們準備一個SQL 查詢語句,並檢查prepare()是否成功。如果失敗,我們使用$mysqli->errno獲取錯誤代碼,並輸出錯誤信息。

  • 綁定參數後,我們執行語句,並通過$stmt->errno來判斷執行過程中是否有錯誤。如果errno的值大於0,則說明執行失敗,可以通過$stmt->error獲取錯誤詳情。

4. 使用mysqli_stmt的錯誤處理

除了$mysqli::$errnomysqli_stmt對象本身也提供了errnoerror屬性,用於判斷預處理語句的執行狀態。我們可以通過mysqli_stmt::errno來捕獲執行時的錯誤代碼。

 <?php
// 創建連接
$mysqli = new mysqli('localhost', 'username', 'password', 'database_name');

// 檢查連接是否成功
if ($mysqli->connect_error) {
    die("Connection failed: " . $mysqli->connect_error);
}

// 準備語句
$stmt = $mysqli->prepare("INSERT INTO users (name, email) VALUES (?, ?)");

// 綁定參數
$name = 'John Doe';
$email = 'john@example.com';
$stmt->bind_param('ss', $name, $email);

// 執行語句
if (!$stmt->execute()) {
    echo "Execute failed: " . $stmt->errno . " - " . $stmt->error;
} else {
    echo "Insert successful!";
}

// 關閉資源
$stmt->close();
$mysqli->close();
?>

在上述示例中, $stmt->execute()返回布爾值,若執行失敗,則通過$stmt->errno$stmt->error輸出錯誤信息。

5. 總結

  • 使用mysqli::$errnomysqli_stmt可以有效地捕獲MySQL 執行過程中的錯誤。

  • 通過mysqli_stmt::errnomysqli_stmt::error ,可以清晰地獲取到失敗的原因,並進行相應的處理。

  • 這些工具可以幫助你更好地調試和處理數據庫操作中的錯誤,確保代碼的健壯性和安全性。

希望本文對你使用mysqli擴展進行數據庫操作有所幫助!