在hyperf中开启调试模式并打印数据库执行错误,需设置debug为true、配置pdo异常模式、启用数据库日志通道,并通过终端输出、db.log或try-catch捕获sql及错误详情。

在 Hyperf 中开启调试模式并打印数据库执行错误,关键在于配置 debug 开关、启用数据库查询日志,并确保错误能被正确捕获和输出。默认情况下,Hyperf 在生产环境会隐藏详细错误信息,需主动调整配置才能看到 SQL 错误详情。
开启全局调试模式
修改 config/autoload/dev.php 或 config/autoload/common.php 中的 debug 配置:
- 确保
'debug' => true已启用(推荐仅在开发环境设置) - 若使用环境变量控制,检查
.env文件中是否设置了APP_DEBUG=true - 该开关影响异常堆栈、Whoops 页面、以及部分组件的调试行为
启用数据库查询日志与错误捕获
Hyperf 的 db 组件默认不打印失败 SQL,需手动开启日志级别和监听异常:
- 在
config/autoload/database.php中,为对应连接添加'options' => [PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION] - 确保
logger配置中数据库日志通道(如db)已启用且级别不低于error - 可监听
Hyperf\Database\Event\QueryExecuted和Hyperf\Database\Event\QueryExceptionOccurred事件进行自定义记录
查看错误的常用方式
数据库执行报错后,可通过以下途径定位问题:
- 终端运行
php bin/hyperf.php start时,错误会直接输出到控制台(含 SQL 语句、绑定参数、错误码和消息) - 查看
runtime/logs/db.log(如果配置了独立 db 日志通道) - 结合
try-catch包裹 DB 操作,手动打印$e->getSql()和$e->getBindings() - 使用
Hyperf\Devtool的命令行工具(如php bin/hyperf.php db:query "SELECT * FROM user")快速测试 SQL
验证是否生效的小技巧
写一段故意出错的代码来测试配置是否起作用:
// 在 Command 或 Controller 中临时添加
try {
$user = DB::table('non_existent_table')->first();
} catch (\Throwable $e) {
var_dump($e->getMessage(), $e->getSql() ?? 'no sql', $e->getBindings() ?? []);
}若能看到完整 SQL 和 MySQL 原生错误(如 “Table doesn’t exist”),说明调试和数据库错误捕获已正常工作。











