ThinkPHP数据库调试由APP_DEBUG全局常量控制,开启后自动启用SQL日志、执行时间统计等;需同时满足APP_DEBUG=true、APP_TRACE=true及数据库日志未禁用,且严禁用于生产环境。

ThinkPHP 的数据库调试模式不是靠单独的“数据库配置文件开关”控制,而是由全局 APP_DEBUG 常量驱动的——它一旦开启,会自动激活数据库层的 SQL 日志记录、执行时间统计、参数绑定详情等调试能力。
数据库调试依赖 APP_DEBUG 全局开关
数据库配置项(如 config/database.php 或 .env 中的 DB_*)本身没有独立的 debug=true 选项。真正起作用的是:
- APP_DEBUG = true 时,框架默认启用 SQL 日志(除非显式关闭)
- 数据库配置中的
'log' => ['enable' => true]是可选增强项,但非必需——APP_DEBUG 已让它默认生效 - 若 APP_DEBUG = false,则无论数据库配置怎么写,SQL 日志和调试信息都不会输出到页面或 trace 面板
如何让 SQL 调试信息可见
仅开 APP_DEBUG 不够,还需确保以下三点同时满足:
- 入口文件顶部已定义
define('APP_DEBUG', true)(必须在任何 require 之前) - 已启用 trace 工具栏:
define('APP_TRACE', true)或 .env 中写APP_TRACE=true - 数据库配置中未禁用日志,例如避免这样写:
'log' => ['enable' => false]
敏感信息防护提醒
开启数据库调试后,原始 SQL、绑定参数(含密码、token 等)可能直接出现在 trace 面板或 runtime/log/ 目录下。务必注意:
立即学习“PHP免费学习笔记(深入)”;
- 切勿在生产环境启用 APP_DEBUG
- 若需保留日志但隐藏敏感内容,可在数据库配置中设置
'log' => ['record' => ['sql', 'time']],排除params - 检查
config/log.php中的'level'是否包含'sql',否则 trace 的 SQL 标签页可能为空
验证是否生效的快速方法
在控制器中执行一条查询,比如 Db::table('user')->find();,然后查看:
- 页面右下角是否有 Trace 小图标?点击后能否看到「SQL」标签页?
- runtime/log/ 目录下是否生成了类似
sql_20260708.log的文件? - 执行
var_dump(\think\App::debug()),结果应为true



















