我似乎遇到了其他人报告的问题,但其他线程中提供的答案不适用于我的情况。我有代码可以连接到我的数据库,它工作正常,我可以使用它来连接并在表等中插入行。我正在测试错误处理,但这不起作用。如果我在 mysqli_connect 行中导致错误,则 DIE 永远不会执行。相反,我得到了丑陋的 PHP 错误屏幕“致命错误:未捕获 mysqli_sql_Exception:...”。如何输出我自己的自定义用户友好错误消息?
// var_dump(function_exists('mysqli_connect')); << returns TRUE
$db = mysqli_connect($mysql_server, $mysql_username, $mysql_password);
if (!$db)
{
die('Failed to connect to the server. contact support.'.mysqli_error($db));
}
我尝试以其他线程中建议的所有方式抑制丑陋的 PHP 致命错误消息(PHP.INI display_errors 关闭,设置 error_reporting(0),甚至在命令前面使用 @)。它所做的只是给我一个空白屏幕(没有致命错误消息),但我的自定义消息也没有打印出来!!!
这变得令人沮丧,因为每个 PHP 专家都声称我用 DIE 编写的代码应该可以工作。我缺少什么?我正在运行 XAMPP CP v3.3 和 PHP v8.2.12。
谢谢。
您需要使用
try-catch
块来捕获异常,然后以允许您显示自定义错误消息的方式处理它。以下是您可以做到的方法:
我建议你这样做:
<?php
// Disable the default exception mode
mysqli_report(MYSQLI_REPORT_OFF);
try {
// Try to connect to the database
$db = mysqli_connect($mysql_server, $mysql_username, $mysql_password);
// Check if the connection was successful
if (!$db) {
throw new Exception('Failed to connect to the server. Please contact support.');
}
} catch (mysqli_sql_exception $e) {
// Handle the exception and display custom error message
die('Failed to connect to the server. Please contact support.');
} catch (Exception $e) {
// Handle any other exceptions. Not a must but could be helpful
die($e->getMessage());
}
// connection was successful
echo 'Connected successfully';
?>
代码尝试连接到数据库,如果连接不成功,则抛出通用异常。
mysqli_sql_exception
被专门捕获并显示自定义错误消息。