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

CodeIgniter 4调用getLastQuery()报错如何获取最后SQL查询

CodeIgniter 4 正确获取最后执行查询语句的方法

报错原因

两个报错均为调用方式错误导致:

  • getLastQuery() 是数据库连接实例的方法,不属于查询构造器(Builder)类,直接调用$builder->getLastQuery()会触发未定义方法错误。
  • Builder类内部存储数据库连接的$db属性是*受保护(protected)*权限,禁止外部直接访问,所以$builder->db->getLastQuery()会报属性无权访问的错误。

正确写法

你在代码开头已经初始化了数据库连接实例$db,直接在查询执行完成后,调用该实例上的getLastQuery()方法即可,修正后的可运行代码:

public function index()
{
    $tbl = 'm_trx';
    $db = \Config\Database::connect();
    $builder = $db->table($tbl);
    
    $cols = "{$tbl}.*";
    $builder->select($cols);

    $data = $builder->get()->getResult();
    $asd = [
        // 复用已初始化的$db连接实例获取最后查询
        'last_query' => $db->getLastQuery()->toString(),
        'data' => $data,
    ];
    return $this->respond($asd);
}

注意事项

  • $db->getLastQuery()返回的是查询对象,如果需要直接拿到完整可执行的SQL字符串,必须追加调用->toString()方法,否则拿到的是对象实例无法直接输出。
  • 必须在查询执行完成(即$builder->get()这类触发SQL执行的方法调用完成)之后再调用getLastQuery(),才能拿到对应本次执行的SQL。
  • 如果没有提前保存连接实例,也可以直接用\Config\Database::connect()->getLastQuery()获取,但复用已有连接实例的资源开销更低。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 16:48:17