当前位置: 首页> 最新文章列表> 如何在 PHP 中优雅地打印 mysqli::$errno 与错误信息

如何在 PHP 中优雅地打印 mysqli::$errno 与错误信息

M66 2025-05-17

在 PHP 中使用 mysqli 进行数据库操作时,经常会遇到需要打印错误信息的情况。通常,mysqli 扩展提供了错误代码 (mysqli::$errno) 和错误信息 (mysqli::$error),可以帮助我们在发生错误时及时反馈问题。但是,如何优雅地打印这些错误信息,让错误日志更加清晰、易于调试呢?本文将向您展示如何在 PHP 中优雅地使用 mysqli::$errno 打印错误代码和错误信息。

1. 基础的 mysqli 错误处理

首先,我们来看一下 PHP 中如何使用 mysqli 进行数据库连接和基本的错误处理。在 mysqli 连接对象中,错误信息和错误代码可以通过 mysqli::$errormysqli::$errno 属性获取。

示例代码:

<?php
$host = 'localhost';
$username = 'root';
$password = 'password';
$database = 'test_db';

// 创建 MySQLi 连接
$conn = new mysqli($host, $username, $password, $database);

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

// 执行查询
$sql = "SELECT * FROM non_existing_table";
$result = $conn->query($sql);

// 检查查询是否成功
if (!$result) {
    // 打印错误代码和错误信息
    echo "错误代码: " . $conn->errno . "<br>";
    echo "错误信息: " . $conn->error;
}

// 关闭连接
$conn->close();
?>

解释:

  • 使用 connect_error 检查数据库连接是否成功。

  • 使用 errnoerror 获取错误代码和错误信息。

  • 在执行查询时,如果出现错误,通过 errnoerror 输出详细信息。

2. 优雅地处理和记录错误信息

直接输出错误信息虽然有效,但在生产环境中,通常我们希望记录错误日志并避免将敏感信息暴露给最终用户。在实际开发中,优雅的错误处理方式不仅可以帮助开发人员快速定位问题,也能提高系统的安全性和用户体验。

示例:日志记录错误信息

我们可以使用 error_log() 函数将错误信息写入日志文件。以下是改进后的代码:

<?php
$host = 'localhost';
$username = 'root';
$password = 'password';
$database = 'test_db';

$conn = new mysqli($host, $username, $password, $database);

if ($conn->connect_error) {
    // 使用 error_log 记录连接错误
    error_log("连接失败: " . $conn->connect_error, 3, "/var/log/php_errors.log");
    exit();
}

$sql = "SELECT * FROM non_existing_table";
$result = $conn->query($sql);

if (!$result) {
    // 记录错误日志
    error_log("错误代码: " . $conn->errno . " 错误信息: " . $conn->error, 3, "/var/log/php_errors.log");

    // 输出友好的错误信息
    echo "操作失败,请稍后再试。";
}

$conn->close();
?>

解释:

  • 使用 error_log() 将错误信息写入指定的日志文件(如 /var/log/php_errors.log)。

  • 将用户友好的错误信息显示在前端,避免暴露过多的技术细节。

  • 通过 3 参数设置将错误写入文件。

3. 在生产环境中优雅地禁用错误输出

在生产环境中,我们通常会禁用 PHP 的错误显示,而是记录到日志中。为了防止敏感的错误信息暴露给终端用户,我们可以通过修改 php.ini 或使用以下代码禁用错误输出:

示例代码:

<?php
// 禁用错误显示
ini_set('display_errors', '0');

// 启用错误日志记录
ini_set('log_errors', '1');
ini_set('error_log', '/var/log/php_errors.log');

// 连接数据库并执行查询
$conn = new mysqli($host, $username, $password, $database);

if ($conn->connect_error) {
    // 记录连接错误
    error_log("连接失败: " . $conn->connect_error, 3, "/var/log/php_errors.log");
    exit();
}

$sql = "SELECT * FROM non_existing_table";
$result = $conn->query($sql);

if (!$result) {
    // 记录错误信息
    error_log("错误代码: " . $conn->errno . " 错误信息: " . $conn->error, 3, "/var/log/php_errors.log");
    echo "操作失败,请稍后再试。";
}

$conn->close();
?>

解释:

  • ini_set('display_errors', '0'):禁用错误显示。

  • ini_set('log_errors', '1'):启用错误日志记录。

  • 错误信息通过 error_log() 函数记录到指定的文件。

4. 使用自定义错误处理函数

为了使错误处理更加灵活,我们可以定义一个自定义的错误处理函数,在其中统一处理 mysqli::$errnomysqli::$error。这样可以减少重复代码,并提高代码的可维护性。

示例代码:

<?php
// 自定义错误处理函数
function handleMysqliError($conn) {
    // 将错误记录到日志
    error_log("错误代码: " . $conn->errno . " 错误信息: " . $conn->error, 3, "/var/log/php_errors.log");

    // 显示友好的错误信息
    echo "操作失败,请稍后再试。";
}

// 创建数据库连接
$conn = new mysqli($host, $username, $password, $database);

if ($conn->connect_error) {
    handleMysqliError($conn);
    exit();
}

$sql = "SELECT * FROM non_existing_table";
$result = $conn->query($sql);

if (!$result) {
    handleMysqliError($conn);
}

$conn->close();
?>

解释:

  • handleMysqliError 函数封装了错误处理的逻辑。

  • 在发生错误时,直接调用该函数,既简化了代码,又确保了统一的错误处理方式。

结语

在 PHP 中,使用 mysqli::$errnomysqli::$error 打印错误信息是非常常见的需求。为了让错误处理更加优雅和安全,我们可以通过日志记录、禁用错误输出、使用自定义错误处理函数等方式,来提升系统的健壮性和用户体验。

希望本文能帮助你更好地理解如何在 PHP 中优雅地处理数据库操作中的错误。如果有任何问题,欢迎留言讨论!