php教程

超轻量级php框架startmvc

Laravel5.* 打印出执行的sql语句的方法

更新时间:2020-03-22 02:26:20 作者:startmvc
本文介绍了Laravel5.*打印出执行的sql语句的方法,分享给大家,具体如下:打开app\Providers\App

本文介绍了Laravel5.* 打印出执行的sql语句的方法,分享给大家,具体如下:

打开app\Providers\AppServiceProvider.PHP,在boot方法中添加如下内容

5.2以下版本


// 先引入DB 
use DB;
// 或者直接使用 \DB::
 DB::listen(function($sql, $bindings, $time) {
 dump($sql);
 });

5.2及以上版本


use DB;
// 或者直接使用 \DB::
// 只能接受一个参数

QueryExecuted {#84 ▼
 +sql: "select * from `posts` where `slug` = ? limit 1"
 +bindings: array:1 [▶]
 +time: 0.59
 +connection: MySqlConnection {#85 ▶}
 +connectionName: "mysql"
}

 DB::listen(function($sql) {
 dump($sql);
 // echo $sql->sql;
 // dump($sql->bindings);
 });

// 如果要放入日志文件中
DB::listen(
 function ($sql) {
 // $sql is an object with the properties:
 // sql: The query
 // bindings: the sql query variables
 // time: The execution time for the query
 // connectionName: The name of the connection

 // To save the executed queries to file:
 // Process the sql and the bindings:
 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);
 }
);

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

laravel打印sql语句 laravel5 打印sql语句 laravel中打印sql语句