當前位置: 首頁> 最新文章列表> mysqli::$info 與mysqli_error() 配合使用的最佳實踐

mysqli::$info 與mysqli_error() 配合使用的最佳實踐

gitbox 2025-05-29

一、mysqli_error() 簡介

mysqli_error()是開發者最熟悉的錯誤處理函數之一,它的作用是在執行數據庫操作失敗時,返回一個描述錯誤的字符串。例如,在執行一個錯誤的SQL語句時:

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

$sql = "SELEC * FROM users"; // 故意寫錯 SELECT
$result = $mysqli->query($sql);

if (!$result) {
    echo "SQL 執行失敗: " . mysqli_error($mysqli);
}

輸出的將是類似這樣的錯誤信息:

 SQL 執行失敗: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'SELEC * FROM users' at line 1

這對於定位語法錯誤是很有幫助的。


二、mysqli::$info 提供更多上下文

mysqli_error()不同, mysqli::$info在SQL語句執行成功後提供關於語句處理結果的更多上下文信息。尤其在執行INSERT , UPDATE , DELETE等語句時,它能告訴你多少行被影響、是否有重複的行被跳過等。

例如:

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

$sql = "UPDATE users SET status='active' WHERE last_login < '2024-01-01'";
$mysqli->query($sql);

echo "影響詳情: " . $mysqli->info;

可能的輸出類似:

 影響詳情: Rows matched: 3  Changed: 2  Warnings: 0

這意味著總共3行匹配到,但只有2行被實際修改。


三、兩者配合使用的最佳實踐

在執行SQL語句時,可以將這兩個函數結合起來使用:如果語句執行失敗,使用mysqli_error()獲取錯誤信息;如果執行成功,再使用mysqli::$info獲取執行詳情。這種方式適用於調試、日誌記錄,甚至在後台管理面板中顯示操作結果。

一個典型的封裝函數如下:

 function executeQuery($mysqli, $sql) {
    if ($mysqli->query($sql) === TRUE) {
        return [
            'success' => true,
            'info' => $mysqli->info
        ];
    } else {
        return [
            'success' => false,
            'error' => mysqli_error($mysqli)
        ];
    }
}

調用示例:

 $response = executeQuery($mysqli, "UPDATE users SET status='inactive' WHERE id IN (1,2,3)");

if ($response['success']) {
    echo "更新成功,詳情如下:" . $response['info'];
} else {
    echo "更新失敗,錯誤訊息:" . $response['error'];
}

輸出(成功時):

 更新成功,詳情如下:Rows matched: 3  Changed: 3  Warnings: 0

輸出(失敗時):

 更新失敗,錯誤訊息:Unknown column 'statuz' in 'field list'

四、實際應用場景舉例

  1. 數據遷移與同步任務<br> 在寫入大量數據時,了解是否數據被更新還是跳過,對判斷任務成功與否非常關鍵

  2. 後台日誌系統<br> 對管理員而言,不只是知道某個操作成功或失敗,還需了解具體影響的記錄數

  3. 自動化測試<br> 當期望影響某些行時,結合使用這兩個函數可以驗證SQL語句的正確性