当前位置: 首页> 最新文章列表> 用 $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 扩展进行数据库操作有所帮助!