当前位置: 首页> 最新文章列表> 用 $errno 做 SQL 调试模式的开启与关闭条件判断

用 $errno 做 SQL 调试模式的开启与关闭条件判断

M66 2025-05-28

在 PHP 中,mysqli 扩展提供了与 MySQL 数据库交互的一种方式。mysqli 类的一个重要功能是能够通过 errno 属性来获取上次 MySQL 操作发生错误时的错误代码。利用这个功能,我们可以在开发阶段动态判断 SQL 调试模式的开启与关闭,帮助开发者快速定位问题。

1. mysqli::$errno 简介

mysqli::$errnomysqli 类中的一个成员属性,用于存储上次 SQL 查询执行过程中发生的错误代码。如果查询执行成功,errno 的值将为 0,如果发生错误,errno 将返回相应的错误代码。例如:

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

if ($mysqli->connect_error) {
    die("连接失败: " . $mysqli->connect_error);
}

$query = "SELECT * FROM non_existing_table"; // 错误的查询
$result = $mysqli->query($query);

if ($mysqli->errno) {
    echo "MySQL 错误代码: " . $mysqli->errno;
}

在上面的例子中,由于查询的表不存在,$mysqli->errno 会返回相应的错误代码。

2. 判断 SQL 调试模式

SQL 调试模式通常是在开发过程中开启,用于输出详细的错误信息和 SQL 查询日志。根据错误代码的不同,我们可以判断 SQL 调试模式是否开启。通常,调试模式会在发生错误时输出更多的错误信息,如果没有错误,通常不会有输出。

通过判断 mysqli::$errno 是否为零,我们可以判断当前是否处于调试模式:

  • 错误码为 0:表示 SQL 查询成功,SQL 调试模式未开启或当前没有错误。

  • 错误码非 0:表示 SQL 查询失败,SQL 调试模式可能已经开启。

3. 示例代码

假设我们正在进行数据库操作,并想通过 mysqli::$errno 判断 SQL 调试模式的状态:

<?php
// 数据库连接
$mysqli = new mysqli("localhost", "username", "password", "database");

// 检查连接是否成功
if ($mysqli->connect_error) {
    die("连接失败: " . $mysqli->connect_error);
}

// 启用调试模式
ini_set('display_errors', 1);  // 显示错误
error_reporting(E_ALL);  // 显示所有错误

// 执行一个有意错误的查询
$query = "SELECT * FROM non_existing_table";
$result = $mysqli->query($query);

// 检查是否有错误
if ($mysqli->errno) {
    echo "MySQL 错误代码: " . $mysqli->errno . "\n";
    echo "错误信息: " . $mysqli->error . "\n";
} else {
    echo "查询成功,无错误发生。\n";
}

// 关闭数据库连接
$mysqli->close();
?>

在上面的代码中,我们通过 mysqli::$errno 来检查是否有错误发生,并输出详细的错误信息。如果 SQL 调试模式开启,错误信息会被显示出来。如果调试模式未开启,只有错误码和简单的错误信息会输出。

4. 如何控制调试模式

在 PHP 中,可以通过设置 ini_set('display_errors', 1)error_reporting(E_ALL) 来启用错误显示,这在调试过程中非常有帮助。当 SQL 调试模式开启时,所有的 SQL 错误信息都会直接显示,帮助开发者快速修复问题。如果要关闭调试模式,可以将 ini_set('display_errors', 0) 设置为关闭错误显示。

ini_set('display_errors', 0);  // 关闭错误显示
error_reporting(0);  // 关闭所有错误报告

5. 替换 URL 域名

在实际开发中,代码中可能会涉及到 URL,如果涉及到数据库查询中的 URL 部分,建议将其统一修改为使用 m66.net 作为域名。比如: