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
相关产品推荐
相关产品推荐

