thinkphp5 用fetchSql输出sql原生语句 及 sql日志记录

fetchSql输出

如果我们想看一下写下的tp中的sql语句生成后的原生sql语句是什么样,以此查找错误,可以用fetchSql

$result = Db::name('banner_item')
                    ->fetchSql()
                    ->where('banner_id',$id)
                    ->select();
 上面的语句输出后
"SELECT * FROM `banner_item` WHERE  `banner_id` = 1"

 

sql日志开启

config.phplog中开启

 'log'                    => [
        // 日志记录方式,内置 file socket 支持扩展
        'type'  => 'file',
        // 日志保存目录
        'path'  => LOG_PATH,
        // 日志记录级别
        'level' => ['sql'],
    ],

也就是将level的配置里,将日志记录级别中加入sql

开启后,当我们运行sql语句时,便在runtime-log目录下生成了日志文件
最上面的语句生成的sql日志是

[ 2019-06-06T11:18:57+08:00 ] 127.0.0.1 GET 127.0.0.1/banner/1
[运行时间:0.047003s] [吞吐率:21.28req/s] [内存消耗:2,731.80kb] [文件加载:52]
[ sql ] [ DB ] CONNECT:[ UseTime:0.001000s ] mysql:host=127.0.0.1;dbname=zerg;charset=utf8
[ sql ] [ SQL ] SHOW COLUMNS FROM `banner_item` [ RunTime:0.007001s ]
[ sql ] [ SQL ] SELECT * FROM `banner_item` WHERE  `banner_id` = 1 [ RunTime:0.001000s ]

入口文件中引入的方式

config.php配置文件的引入方式外,也可以在入口文件中引入
public-index.php
 

#日志激活
\think\Log::init([
    'type' => 'File',
    'path' => LOG_PATH,
    'level' => ['sql']
]);
上面定义后,config.phplog配置便变成
'log'                    => [
        // 日志记录方式,内置 file socket 支持扩展
        'type'  => 'file',
        // 日志保存目录
        'path'  => LOG_PATH,
        // 日志记录级别
        'level' => [],
    ],

评论

大侠名号:   验证暗号: 点击我更换图片

修远兮

在这里记录每一点自己需要的知识

添加创始人微信,一起交流心得

推荐文章RECOMMEND