CodeIgniter需手动启用数据库调试模式并配置日志驱动才能记录SQL查询;关键步骤包括设置'DBDebug'为true、使用log_message记录last_query或queries、确保日志阈值为4且writable/logs/可写。

CodeIgniter 默认不记录数据库查询日志,需手动启用并配合配置才能看到完整 SQL 执行过程。核心在于开启 数据库调试模式 并确保日志驱动可用(如文件日志),而非仅靠 `CI_DB` 的简单打印。
启用数据库调试模式(关键一步)
在数据库配置文件 app/Config/Database.php 中,找到对应数据库组(如 default),将 'DBDebug' 设置为 true:
'DBDebug' => true,
此设置让 CodeIgniter 在查询出错时显示详细 SQL 和错误信息,同时也为后续日志收集提供基础支持。
在控制器或模型中手动获取并记录查询
CodeIgniter 不自动写入日志文件,但提供了 $this->db->last_query() 和 $this->db->queries 等属性。可在关键位置主动记录:
- 使用
log_message('debug', $this->db->last_query());写入系统日志(需日志目录可写) - 遍历所有执行过的查询:
foreach ($this->db->queries as $q) { log_message('info', $q); } - 注意:这些查询只在当前请求生命周期内保留,建议在请求结束前统一处理
配合系统日志驱动输出到文件
确保 app/Config/Logger.php 中日志级别允许 debug/info 级别输出:
-
public int $threshold = 4;(4 = DEBUG 级别及以上) - 确认 writable/logs/ 目录存在且有写权限
- 日志文件名格式为
log-YYYY-mm-dd.php,SQL 日志会以DEBUG -开头出现在其中
开发环境快速验证技巧
在视图末尾或调试页面加入以下代码,直接查看本次请求所有查询:
<?php if (ENVIRONMENT === 'development'): ?><pre><?php print_r($this->db->queries); ?></pre><?php endif; ?>
该方式适合本地调试,避免频繁翻日志文件,但请勿在生产环境启用。


















