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

