首页 >后端开发 >php教程 >为什么'mysqli_query() 或 die()”是一种不好的做法,有哪些更好的选择?

为什么'mysqli_query() 或 die()”是一种不好的做法,有哪些更好的选择?

Linda Hamilton
Linda Hamilton原创
2025-01-01 07:05:08852浏览

Why is

“Mysqli or Die”的危险:PHP 中的替代错误处理

当使用 mysqli 扩展与 MySQL 数据库交互时,它使用“or die”结构来处理错误是常见的做法。然而,这种方法存在一些值得探索的缺点。

为什么“Or Die”应该消失?

  • 系统内部结构的暴露:“Or die”显示敏感系统消息,可能会将漏洞暴露给恶意软件
  • 用户困惑:错误消息可能很神秘,让没有技术专业知识的临时用户感到沮丧。
  • 脚本终止:“要么死”突然终止脚本执行,破坏用户体验并阻碍错误分析。
  • 缺乏可恢复性:与异常不同,“或死亡”没有提供优雅恢复或错误记录的机会。
  • 缺少错误位置:“Or die”不提供任何导致错误的行的指示,这使得查找起来很乏味debug.

“Or Die”的替代品

强烈建议配置 mysqli 在错误时抛出异常,而不是依赖“or die” 。这可以通过以下代码来实现:

mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);

随后,无需任何额外代码即可执行 MySQL 命令:

$result = mysqli_query($link, $sql);

异常处理

当异常发生时,可以被捕获并进行适当的处​​理。例如:

try {
    $result = mysqli_query($link, $sql);
} catch (mysqli_sql_exception $e) {
    // Log the error in a custom table or file
    log_error($e->getMessage());
}

自定义错误日志记录

除了异常处理之外,还需要建立一个自定义的错误日志系统。这允许将错误记录在专用表或文件中,从而提供用于故障排除的集中存储库。日志功能可以实现如下:

function log_error($message) {
    // Connect to the error logging table database
    $error_conn = connect_to_error_logging_db();

    // Insert the error message into the error logging table
    $query = "INSERT INTO error_log (message, timestamp) VALUES ('$message', NOW())";
    mysqli_query($error_conn, $query);

    // Close the error logging database connection
    mysqli_close($error_conn);
}

以上是为什么'mysqli_query() 或 die()”是一种不好的做法,有哪些更好的选择?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn