在 CentOS 上,PHP 本身默认不会记录 SQL 语句,是否能记录 SQL,取决于你用的 PHP 运行方式、框架、数据库扩展和日志配置。下面分情况说明:
默认不能,需要你自己在代码里写日志。
示例(PDO):
$sql = "SELECT * FROM user WHERE id = ?";
error_log($sql); // 写入 PHP 错误日志
或写入文件:
file_put_contents('/var/log/php_sql.log', $sql . PHP_EOL, FILE_APPEND);
✅ 结论:
PHP 原生不自动记录 SQL,只能手动记录
Laravel 可以非常方便地记录 SQL
.env
LOG_CHANNEL=stack
app/Providers/AppServiceProvider.php
\DB::listen(function ($query) {
\Log::info($query->sql, $query->bindings);
});
日志位置:
storage/logs/laravel.log
SET GLOBAL slow_query_log = 'ON';
ThinkPHP 自带 SQL 日志
日志位置:
runtime/log/
开启:
'app_debug' => true
最可靠、与 PHP 无关
SET GLOBAL general_log = 'ON';
SET GLOBAL general_log_file = '/var/log/mysql/general.log';
⚠️ 性能影响大,仅调试用
# /etc/my.cnf
slow_query_log = 1
slow_query_log_file = /var/log/mysql/slow.log
long_query_time = 1
/var/log/php-fpm/error.log
/var/log/httpd/error_log
/var/log/nginx/error.log
/var/log/mysql/slow.log
| 方式 | 是否记录 SQL | 说明 |
|---|---|---|
| PHP 原生 | ❌ | 需手写日志 |
| Laravel | ✅ | DB::listen |
| ThinkPHP | ✅ | 自动 |
| MySQL 日志 | ✅✅ | 最完整 |
如果你能告诉我:
我可以给你 精确配置方案。