对 MYSQL 错误给出自定义响应

问题描述 投票:0回答:1

我似乎遇到了其他人报告的问题,但其他线程中提供的答案不适用于我的情况。我有代码可以连接到我的数据库,它工作正常,我可以使用它来连接并在表等中插入行。我正在测试错误处理,但这不起作用。如果我在 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。

谢谢。

php error-handling
1个回答
0
投票

您需要使用

try-catch
块来捕获异常,然后以允许您显示自定义错误消息的方式处理它。以下是您可以做到的方法:

  • 禁用 mysqli_connect 抛出默认异常。
  • 使用 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
被专门捕获并显示自定义错误消息。

© www.soinside.com 2019 - 2024. All rights reserved.