You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP函数内的try catch不生效?为何无法捕获mysqli_sql_exception?

问题原因及解决方法

你的代码无法捕获异常的核心原因是:mysqli默认不会抛出异常,只会返回false并触发警告。只有手动开启mysqli的异常模式后,错误才会以mysqli_sql_exception的形式抛出,你的try/catch才能生效。

解决步骤

  1. 开启mysqli异常模式
    在数据库连接初始化时(或脚本开头)添加以下代码,强制mysqli将错误转为异常抛出:

    mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
    
  2. 修正函数的异常捕获逻辑
    虽然mysqli_sql_exception继承自Exception,直接捕获Exception也能生效,但更精准的方式是直接捕获mysqli_sql_exception,避免误捕其他类型的异常。修改后的函数如下:

    function dbquery($mysqli, $query) {
        try {
            $result = mysqli_query($mysqli, $query);
            return $result;
        } catch (mysqli_sql_exception $e) {
            echo "Caught exception: " . $e->getMessage();
            return false;
        }
    }
    

补充说明

如果你的环境中已经全局开启了mysqli异常模式,但函数内的catch仍未生效,需要检查:

  • 是否存在命名空间冲突(如果使用了命名空间,需用\mysqli_sql_exception来引用全局类)
  • PHP版本是否过低(mysqli_sql_exception在PHP 5.5.0及以上版本才可用)

内容的提问来源于stack exchange,提问作者Vladek

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 02:07:07