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

CodeIgniter 4 发生MySQL错误时如何获取完整执行的SQL查询

CodeIgniter 4 发生SQL错误时获取完整查询语句的方案

现有代码不生效的原因

$builder->get()执行SQL出错时会直接抛出数据库异常,中断程序运行,写在get()之后的echo语句不会被触发,因此无法输出查询内容。

解决方法

方案1:开启开发模式(本地调试首选)

修改项目根目录下的.env文件,将环境变量配置为开发模式:

CI_ENVIRONMENT = development

开启后CodeIgniter 4会自动渲染完整异常页面,直接展示错误的SQL语句、参数绑定信息、堆栈调用路径,无需额外写打印代码。

方案2:捕获异常手动获取SQL(适用于生产环境自定义处理)

使用try-catch块包裹查询逻辑,捕获数据库异常后调用数据库连接实例的getLastQuery()方法获取完整SQL,示例代码如下:

// 初始化数据库连接实例
$db = \Config\Database::connect();

try {
    $builder = $db->table($this->table);
    $builder->select("usr_lock");
    // 正确的where写法:查询构造器会自动处理参数转义和引号,无需手动拼接
    $builder->where("usr_lock >=", date('Y-m-d H:i:s'));
    $builder->where($this->primarykey, $user_id);
    $r = $builder->get()->rowArray();
    return $r['usr_lock'];
} catch (\CodeIgniter\Database\Exceptions\DatabaseException $e) {
    echo "<br>错误信息:" . $e->getMessage();
    // 输出完整执行的SQL语句
    echo "<br>最后执行查询:" . $db->getLastQuery();
    exit;
}

额外说明

你当前遇到的SQL语法错误,是因为手动拼接where条件的引号导致的,使用查询构造器的原生参数绑定写法即可自动处理转义和引号,既避免语法错误,也能防止SQL注入风险。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 08:54:03