laravel打印sql语句

打印sql语句,直接在你执行SQL语句后输出php

方法一:html

$queries = DB::getQueryLog();

 $a = end($queries);

 $tmp = str_replace('?', '"'.'%s'.'"', $a["query"]);

 echo vsprintf($tmp, $a['bindings']);

 exit;

方法二:  能够把下面代码放在查询语句前:laravel

\DB::listen(function($sql, $bindings, $time) {
     foreach ($bindings as $replace){
         $value = is_numeric($replace) ? $replace : "'".$replace."'";
         $sql = preg_replace('/\?/', $value, $sql, 1);
     }
     dd($sql);
 })

 方法三:git

下载 clockwork 扩展,这个扩展能够在不少框架里调试,好比laravel,lumen,CI等等,非常好用,github

安装完之后,直接在firebug里能够看到执行的语句!app

方法四:框架

本身写

执行ide

php artisan make:listener QueryListenerpost

会生成app/Listeners/QueryListener.php文件

而后把handler修改为下面这样

namespace App\Listeners; use Illuminate\Database\Events\QueryExecuted; use Illuminate\Queue\InteractsWithQueue; use Illuminate\Contracts\Queue\ShouldQueue; class QueryListener { /** * Create the event listener. * * @return void */ public function __construct() { // } public function handle(QueryExecuted $event) { $sql = str_replace("?", "'%s'", $event->sql); $log = vsprintf($sql, $event->bindings); \Log::info($log); } }

打开 app/Providers/EventServiceProvider.php ,在 $listen 中添加

protected $listen = [ 'App\Events\SomeEvent' => [ 'App\Listeners\EventListener', ], 'Illuminate\Database\Events\QueryExecuted' => [ 'App\Listeners\QueryListener' ] ];

而后在 本身的storage\log\ 下看本身的日志吧!

相似这样

[2017-01-02 02:50:09] local.INFO: select count(*) as aggregate from `g9zz_posts` [2017-01-02 02:50:09] local.INFO: select * from `g9zz_posts` limit 30 offset 0 [2017-01-02 02:50:09] local.INFO: select * from `g9zz_categories` where `g9zz_categories`.`id` in ('1', '6', '5', '3', '4') [2017-01-02 02:50:09] local.INFO: select * from `g9zz_users` where `g9zz_users`.`id` in ('8', '12', '10', '16', '5') [2017-01-02 02:50:09] local.INFO: select * from `g9zz_users` where `g9zz_users`.`id` in ('11', '17', '0') 

建议把日志换成daily的,否则日志大小会爆炸的哦(config/app.php 里的APP_LOG)

转载自: http://www.iphpt.com/detail/75/

相关文章
相关标签/搜索