[PHP] Laravel 5.5 打印SQL语句
[PHP] Laravel 5.5 打印SQL语句
四种方法
第一种方法:
打印SQL默认是关闭的,需要在/vendor/illuminate/database/Connection.php中打开。
// protected $loggingQueries = false;
protected $loggingQueries = true;
之后可在代码中使用了:
public function index(){
$result = DB::select('select * from activity');
$log = DB::getQueryLog();
var_dump($log);
}
第二种方法:
如果不想开启但需要临时查看,可以这样操作:
public function index(){
DB::connection()->enableQueryLog();
$result = DB::select('select * from activity');
$log = DB::getQueryLog();
var_dump($log);
}
第三种方法:
在需要打印的语句前,添加监听
DB::listen(function($query) {
$bindings = $query->bindings;
$sql = $query->sql;
foreach ($bindings as $replace){
$value = is_numeric($replace) ? $replace : "'".$replace."'";
$sql = preg_replace('/\?/', $value, $sql, 1);
}
dd($sql);
});
第四种方法:
在AppServiceProvider 中的boot方法中添加,代码如 下文 红色 代码所示:
<?php namespace App\Providers; use Illuminate\Support\Facades\DB; class AppServiceProvider extends ServiceProvider
{
/**
* Bootstrap any application services.
*
* @return void
*/
public function boot()
{
$this->dumpSqlLog(); ***
}
public function dumpSqlLog(){
DB::listen(
function ($sql) {
foreach ($sql->bindings as $i => $binding) {
if ($binding instanceof \DateTime) {
$sql->bindings[$i] = $binding->format('\'Y-m-d H:i:s\'');
} else {
if (is_string($binding)) {
$sql->bindings[$i] = "'$binding'";
}
}
}
// Insert bindings into query
$query = str_replace(array('%', '?'), array('%%', '%s'), $sql->sql);
$query = vsprintf($query, $sql->bindings);
// Save the query to file
$logFile = fopen(
storage_path('logs' . DIRECTORY_SEPARATOR . date('Y-m-d') . '_query.log'),
'a+'
);
fwrite($logFile, date('Y-m-d H:i:s') . ': ' . $query . PHP_EOL);
fclose($logFile);
}
);
}
} // Insert bindings into query $query = str_replace(array('%', '?'), array('%%', '%s'), $sql->sql); $query = vsprintf($query, $sql->bindings); // Save the query to file $logFile = fopen( storage_path('logs' . DIRECTORY_SEPARATOR . date('Y-m-d') . '_query.log'), 'a+' ); fwrite($logFile, date('Y-m-d H:i:s') . ': ' . $query . PHP_EOL); fclose($logFile); } ); } /** * Register any application services. * * @return void */ public function register() { // }}
日志在 storage/log/xxx_query.log
本博客地址: wukong1688
本文原文地址:https://www.cnblogs.com/wukong1688/p/10933635.html
转载请著名出处!谢谢~~
今日心得:
如果你不放弃自己,那么,没有人能让你放弃!
[PHP] Laravel 5.5 打印SQL语句的更多相关文章
- laravel模型中打印sql语句
模型中有个 ->toSql() 可以打印sql语句
- laravel打印sql语句
打印sql语句,直接在你执行SQL语句后输出 方法一: $queries = DB::getQueryLog(); $a = end($queries); $tmp = str_replace('?' ...
- Yii2 打印sql语句和批量插入数据
打印sql语句: $model->find()->createCommand()->getRawSql(); 批量插入 Yii::$app->db->createComm ...
- mybatis 打印sql 语句
拦截器 package com.cares.asis.mybatis.interceptor; import java.text.DateFormat; import java.util.Date; ...
- mybatis下使用log4j打印sql语句和执行结果
转载自:https://www.cnblogs.com/jeevan/p/3493972.html 本来以为很简单的问题, 结果自己搞了半天还是不行; 然后google, baidu, 搜出来各种方法 ...
- mybatisplus打印sql语句
package com.osplat.config; import com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor; ...
- Django之Django终端打印SQL语句
Django之Django终端打印SQL语句 在Django项目中,settings.py文件中,在最后添加如下代码即可实现在Django终端打印SQL语句. LOGGING = { 'version ...
- EOS下控制台以及图形界面打印sql语句
EOS下控制台以及图形界面打印sql语句 场景需求:在eos中打印sql语句,包括数据实体,查询实体和命名sql的sql语句. 所需资源: P6spy:负责拦截sql,并打印. Sqlprofiler ...
- mybatis和redis整合 log4j打印sql语句
首先,需要在项目中引进jedis-2.8.1.jar包,在pom.xml里加上 <dependency> <groupId>redis.clients</groupId& ...
随机推荐
- http://www.cnblogs.com/xdp-gacl/p/4200090.html
孤傲苍狼 只为成功找方法,不为失败找借口! JavaWeb学习总结(五十)——文件上传和下载 在Web应用系统开发中,文件上传和下载功能是非常常用的功能,今天来讲一下JavaWeb中的文件上传和下载功 ...
- c#---Socean.RPC框架实测[并发量13w][响应时间0.04ms]
目录1.高性能RPC框架:Socean.RPC 前言 经过一段时间的优化,Socean.RPC的性能又提高了一些,不过这差不多是socketAPM模型的极限了.本框架仅仅2000多行代码,无第三方框架 ...
- CentOS8 安装MySQL8.0
2019/11/25, CentOS 8,MySQL 8.0 摘要: CentOS 8 安装MySQL 8.0 并配置远程登录 安装MySQL8.0 使用最新的包管理器安装MySQL sudo dnf ...
- 根据语义来选择:value-like传副本, pointer-like传引用
★ (一个成员)变量的 创建.初始化.赋值 “默认值”:内置类型的局部变量.内置类型的成员变量(未设置=initval;) 没有默认值! 若创建时不指定值,则不进行初始化.则其值未定义!!! “指定 ...
- 分布式图片服务器FastDFS
1. 什么是FastDFS FastDFS 是用 c 语言编写的一款开源的分布式文件系统.FastDFS 为互联网量身定制,充分考虑了冗余备份.负载均衡.线性扩容等机制,并注重高可用.高性能等指标,使 ...
- 下拉框等需要显示上下箭头切换的CSS样式
下拉框等需要显示上下箭头切换的CSS样式 .icon-right, .icon-down, .icon-up { display: inline-block; padding-right: 13r ...
- python基础之对象之间的交互
面对对象编程之对象之间的交互 这是一个猫狗大战的例子 # 猫类 class Cat: def __init__(self, name, hp, attack): self.name = name # ...
- C#的静态类
静态类 静态类与非静态类的重要区别在于静态类不能实例化,也就是说,不能使用 new 关键字创建静态类类型的变量.在声明一个类时使用static关键字,具有两个方面的意义:首先,它防止程序员写代码来实例 ...
- linux 使用ssh-keygen生成ssh公钥和私钥
linux一般为在自己的家目录下建立 .ssh 文件夹 中生成密钥 /home/username/.ssh 生成的命令如下: ssh-keygen -t rsa -C "yourname@y ...
- .NET Core中Quartz.NET的依赖注入
目录 介绍 项目概况 创建配置文件 使用构造函数注入 使用选项模式 结论 介绍 Quartz.NET是一个方便的库,允许您通过实现IJob接口来安排重复任务.然而,它的局限性在于,默认情况下,它仅支持 ...