【问题标题】:Why is my catch exception code not working?为什么我的捕获异常代码不起作用?
【发布时间】:2020-07-11 11:26:32
【问题描述】:

我可以连接数据库和 PHP,但如果我故意弄乱数据库,它不会执行捕获的代码。捕获不起作用。它只显示警告。我也想知道如何摆脱它。

这是我得到的警告:

警告:mysqli::__construct(): (HY000/1049): Unknown database 'mytodsssssssdsdasdassdos' in D:\XAMPP\htdocs\projects\index.php on line 10

我做错了什么?

这是我的 PHP 代码

<?php
  
$user = 'root';
$password = '';
$db = 'mytodsssssasdsdasdassdos'; //real DB name is mytodos


try {
    $db = new mysqli('localhost', $user, $password, $db);
} catch (mysqli_sql_exception $e) {
    die (var_dump('Unable to Connect to the Database.'));
} //echo 'Connected.';

【问题讨论】:

  • @juergend mysqli 的文档非常糟糕并且充满了问题。在这种情况下,像在手册中那样做是一种糟糕的做事方式。 Mysqli 文档甚至没有显示如何正确启用错误报告,更不用说整个 die 事情
  • die (var_dump('Unable to Connect to the Database.')); 不是你想用 try..catch 做的。 Mysqli 连接错误与所有其他错误没有什么不同,因此不值得专门处理代码

标签: php mysqli


【解决方案1】:

默认情况下,mysqli 的错误报告是禁用的。您得到的唯一“错误”是无法建立连接时的警告。你不能在 PHP 中使用 try-catch 来捕捉警告。但是,有一个非常简单的解决方案。正确启用错误报告,您将能够捕获所有 mysqli 错误。

try {
    mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
    $db = new mysqli('localhost', $user, $password, $db);
} catch (mysqli_sql_exception $e) {
    // Do something with the exception here and rethrow it.
    throw $e;
}

在不相关的注释中,您似乎不需要在那里捕捉任何东西。只需坚持标准的连接方式即可:

mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
$db = new mysqli('localhost', $user, $password, $db);
$db->set_charset('utf8mb4');

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-16
    • 2013-03-03
    • 2016-05-13
    • 1970-01-01
    相关资源
    最近更新 更多