當前位置: 首頁> 最新文章列表> 用$errno 判斷mysqli::prepare() 是否成功

用$errno 判斷mysqli::prepare() 是否成功

M66 2025-05-28

在PHP 中,使用MySQL 數據庫時, mysqli::prepare()是一個用於準備SQL 語句的非常重要的函數。在很多情況下,我們希望確保SQL 語句的準備過程沒有出錯,特別是在數據庫操作失敗的情況下。 mysqli::$errno就是我們可以用來判斷是否存在錯誤的一個屬性,它可以幫助我們確定prepare()方法是否成功執行。

1. 什麼是mysqli::prepare()

mysqli::prepare()是一個用於預處理SQL 語句的函數。預處理的好處是可以防止SQL 注入,提高數據庫操作的效率。在實際使用時,我們通常通過prepare()函數將SQL 語句發送到MySQL 服務器,由MySQL 服務器來解析並優化SQL 語句。

例如,以下代碼演示瞭如何使用mysqli::prepare()來準備一個SQL 語句:

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

// Check connection
if ($mysqli->connect_errno) {
    echo "Failed to connect to MySQL: " . $mysqli->connect_error;
    exit();
}

$stmt = $mysqli->prepare("SELECT * FROM users WHERE email = ?");
?>

2. 使用mysqli::$errno判斷prepare()是否成功

當使用mysqli::prepare()時,若SQL 語句有錯誤, prepare()將返回false ,並且你可以通過檢查mysqli::$errno來獲取詳細的錯誤信息。

 <?php
// 準備 SQL 語句
$stmt = $mysqli->prepare("SELECT * FROM users WHERE email = ?");

if ($stmt === false) {
    // 如果 prepare() 返回 false,則意味著 SQL 語句有错误
    echo "MySQLi prepare failed. Error number: " . $mysqli->errno . "\n";
    echo "Error message: " . $mysqli->error . "\n";
} else {
    // 如果 prepare() 成功,執行進一步操作
    echo "SQL prepared successfully!\n";
}
?>

在這個例子中,如果prepare()失敗, $mysqli->errno會返回一個錯誤代碼。你可以通過這個錯誤代碼來了解失敗的原因。 $mysqli->error則提供了具體的錯誤信息,幫助開發者快速定位問題。

3. 常見的mysqli::$errno錯誤代碼

mysqli::prepare()執行失敗時, mysqli::$errno會設置為一個非零值。以下是一些常見的錯誤代碼:

  • 1049 : 數據庫不存在。

  • 1054 : 字段不存在(例如SELECT 中使用的列名拼寫錯誤)。

  • 1064 : SQL 語法錯誤。

  • 1146 : 表不存在。

你可以通過這些錯誤代碼判斷具體的問題,例如:

 if ($stmt === false) {
    switch ($mysqli->errno) {
        case 1049:
            echo "數據庫不存在!";
            break;
        case 1064:
            echo "SQL 語法錯誤!";
            break;
        default:
            echo "未知錯誤: " . $mysqli->errno;
            break;
    }
}

4. 完整的示例代碼

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

// 檢查連接
if ($mysqli->connect_errno) {
    echo "連接失敗: " . $mysqli->connect_error;
    exit();
}

// 準備 SQL 語句
$stmt = $mysqli->prepare("SELECT * FROM users WHERE email = ?");

if ($stmt === false) {
    // 如果 prepare() 返回 false,打印錯誤信息
    echo "MySQLi prepare failed. Error number: " . $mysqli->errno . "\n";
    echo "Error message: " . $mysqli->error . "\n";
} else {
    // 如果成功
    echo "SQL prepared successfully!\n";
    $stmt->close();
}

$mysqli->close();
?>