当前位置: 首页> 最新文章列表> 用 $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();
?>