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

monwx1rj  于 2022-10-30  发布在  PHP
关注(0)|答案(1)|浏览(300)

我在try块中得到了一个mysqli_query,如下所示:

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

我正在尝试捕获“PHP致命错误:未捕获的mysqli_sql_异常错误:数据太长列...”错误,所以我可以在页面上显示一个PHP消息。目前,因为这是一个致命的错误,它只是崩溃的脚本,我不能显示任何东西。
我试过将mysqli_query($db,$sql);放在try catch块中,但问题仍然存在。我在其他地方读到设置mysqli_report(MYSQLI_REPORT_ALL);可能会有帮助,我试过将其放在查询之前,但它没有改变任何东西。
有什么想法吗?

wj8zmpe1

wj8zmpe11#

当在SQL查询执行周围使用try catch是合理的时,这种情况很少出现。
为了处理一个特定的SQL错误,你可以在catch块中添加一个条件来查找特定的错误,可以使用getCode()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;
    }
}

相关问题