首页  >  文章  >  后端开发  >  为什么升级到 PHP 8.1 后 mysqli_connect 失败时不显示我的自定义错误消息?

为什么升级到 PHP 8.1 后 mysqli_connect 失败时不显示我的自定义错误消息?

Patricia Arquette
Patricia Arquette原创
2024-10-26 20:38:02193浏览

Why Are My Custom Error Messages Not Displaying in mysqli_connect Failures After Upgrading to PHP 8.1?

调查 mysqli_connect 失败中隐藏的自定义错误消息

在尝试建立数据库连接时,您遇到了一个问题,即您定义的自定义错误消息未被连接失败时显示。您也在寻找一种方法来抑制用户视图中的错误消息。

错误消息的本质

从 PHP 8.1 开始,mysqli 扩展现在会在出现以下情况时自动抛出异常:错误,消除了像早期版本的 PHP 中那样进行手动错误处理的需要。

错误抑制背后的基本原理

不再建议使用自定义错误消息(如您​​定义的错误消息)错误处理。 PDO 和 mysqli 都能够自动引发错误,就像任何其他 PHP 命令一样。因此,像您尝试使用 if (!$conn) 段那样手动检查错误已经过时了。

避免向用户暴露错误

防止错误消息到达用户,您应该使用 display_errors 配置选项,可以将其设置为 0 以抑制所有错误输出。这可以在 php.ini 文件中或直接在 PHP 代码中配置:

<code class="php">ini_set('display_errors', 0);</code>

提供用户友好的错误页面

建议不要显示神秘的错误消息向网站访问者呈现用户友好的错误页面。这可以通过设置一个错误处理程序来实现,如下所示,它将捕获所有不可恢复的错误:

<code class="php">set_exception_handler(function ($e)
{
    error_log($e);
    http_response_code(500);
    if (ini_get('display_errors')) {
        echo $e;
    } else {
        echo "<h1>500 Internal Server Error</h1>\nAn internal server error has been occurred.<br>\nPlease try again later.";
    }
});</code>

单独处理数据库连接错误

如果需要专门处理数据库连接错误,您可以使用包含在 try-catch 块中的单独连接测试脚本,与常规连接代码分开。

保护连接凭据

为了增强安全性,请更新您的 PHP 版本到 8.2 或更高版本,这会掩盖数据库密码出现在堆栈跟踪中。

以上是为什么升级到 PHP 8.1 后 mysqli_connect 失败时不显示我的自定义错误消息?的详细内容。更多信息请关注PHP中文网其他相关文章!

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