Laravel框架實現(xiàn)利用監(jiān)聽器進行sql語句記錄功能
本文實例講述了Laravel框架實現(xiàn)利用監(jiān)聽器進行sql語句記錄功能。分享給大家供大家參考,具體如下:
利用監(jiān)聽器進行sql語句記錄
1、監(jiān)聽sql語句的事件類已經(jīng)定義,直接創(chuàng)建監(jiān)聽器類即可:
# 監(jiān)聽sql make:listener QueryListener --event=Illuminate\Database\Events\QueryExecuted
2、監(jiān)聽器類代碼
./app/Listeners/QueryListener.php
<?php
namespace App\Listeners;
use Illuminate\Database\Events\QueryExecuted;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Contracts\Queue\ShouldQueue;
use App\Http\Models\OperationLog;
class QueryListener
{
/**
* Create the event listener.
*
* @return void
*/
public function __construct()
{
//
}
/**
* Handle the event.
*
* @param QueryExecuted $event
* @return void
*/
public function handle(QueryExecuted $event)
{
$sql = str_replace("?", "'%s'", $event->sql);
$log = vsprintf($sql, $event->bindings);
# 此處$uid定義是依賴于中間件記錄操作日志代碼
$uid = isset($_SERVER['admin_uid']) ? $_SERVER['admin_uid'] : 0;
if('select' != substr($log , 0 , 6)){
if('insert into `operationLog`' != substr($log , 0 , 26)){
$OperationLog = new OperationLog();
$OperationLog->uid = $uid;
$OperationLog->sql = $log;
$OperationLog->input = '';
$OperationLog->save();
}
}
}
}
3、引入監(jiān)聽器
./app/Providers/EventServiceProvider.php
protected $listen = [
...
\Illuminate\Database\Events\QueryExecuted::class => [
'App\Listeners\QueryListener'
],
...
];
此時進行操作時就會記錄sql日志
相關文章:
Laravel框架實現(xiàn)利用中間件進行操作日志記錄功能
更多關于Laravel相關內容感興趣的讀者可查看本站專題:《Laravel框架入門與進階教程》、《php優(yōu)秀開發(fā)框架總結》、《php面向對象程序設計入門教程》、《php+mysql數(shù)據(jù)庫操作入門教程》及《php常見數(shù)據(jù)庫操作技巧匯總》
希望本文所述對大家基于Laravel框架的PHP程序設計有所幫助。
相關文章
三個思路解決laravel上傳文件報錯:413 Request Entity Too Large問題
上傳圖片的時候,是用laravel自帶的上傳圖片的方法,一下氣上傳了20張,結果就無情報錯:413 Request Entity Too Large,后面查一下,這個報錯信息是nginx報的錯誤,不是php報的錯誤。也就是說在上傳圖片的時候被nginx攔截了2017-11-11
WordPress中獲取指定分類及其子分類下的文章數(shù)目
這篇文章主要介紹了WordPress中獲取指定分類及其子分類下的文章數(shù)目的方法,文中總結了一些相關內置函數(shù)的使用,需要的朋友可以參考下2015-12-12

