如何在mysqli中捕获一个特定的mysql错误?

How to catch one specific mysql error in mysqli?

提问人:amd_123 提问时间:10/26/2022 最后编辑:Your Common Senseamd_123 更新时间:12/3/2022 访问量:253

问:

我在 try 块中有一个mysqli_query,如下所示:

    try {
        mysqli_query($db,$sql);
    }
    catch (Exception $e) {
        throw $e;
    }

我正在尝试捕获“PHP 致命错误:未捕获mysqli_sql_exception:数据太长,无法进行列...”错误,所以我可以在页面上显示 PHP 消息。目前,由于这是一个致命的错误,它只会使脚本崩溃,我无法显示任何内容。

我尝试放入一个尝试捕获块,但问题仍然存在。我在其他地方读到该设置可能会有所帮助,我尝试将其放在查询之前,但它不会改变任何内容。mysqli_query($db,$sql);mysqli_report(MYSQLI_REPORT_ALL);

有什么想法吗?

php mysql 异常 mysqli

评论


答:

-2赞 Your Common Sense 10/27/2022 #1

在 SQL 查询执行周围使用 try catch 是合理的时,这种情况很少见。

为了处理一个特定的 SQL 错误,您可以在块中添加一个查找特定错误的条件,使用 或 ,然后,如果找到,请按照您喜欢的方式处理它。否则,所有其他错误将在其他地方以通常的方式处理:catchgetCode()getMessage()throw $e;

try {
    mysqli_query($db,$sql);
}
catch (mysqli_sql_exception $e) {
    if (str_starts_with($e->getMessage(),"Data too long for column")) {
        // handle the error
    } else {
        throw $e;
    }
}