Laravel框架實(shí)現(xiàn)利用監(jiān)聽(tīng)器進(jìn)行sql語(yǔ)句記錄功能
本文實(shí)例講述了Laravel框架實(shí)現(xiàn)利用監(jiān)聽(tīng)器進(jìn)行sql語(yǔ)句記錄功能。分享給大家供大家參考,具體如下:
利用監(jiān)聽(tīng)器進(jìn)行sql語(yǔ)句記錄
1、監(jiān)聽(tīng)sql語(yǔ)句的事件類已經(jīng)定義,直接創(chuàng)建監(jiān)聽(tīng)器類即可:
# 監(jiān)聽(tīng)sql make:listener QueryListener --event=Illuminate\Database\Events\QueryExecuted
2、監(jiān)聽(tīng)器類代碼
./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)聽(tīng)器
./app/Providers/EventServiceProvider.php
protected $listen = [
...
\Illuminate\Database\Events\QueryExecuted::class => [
'App\Listeners\QueryListener'
],
...
];
此時(shí)進(jìn)行操作時(shí)就會(huì)記錄sql日志
相關(guān)文章:
Laravel框架實(shí)現(xiàn)利用中間件進(jìn)行操作日志記錄功能
更多關(guān)于Laravel相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《Laravel框架入門(mén)與進(jìn)階教程》、《php優(yōu)秀開(kāi)發(fā)框架總結(jié)》、《php面向?qū)ο蟪绦蛟O(shè)計(jì)入門(mén)教程》、《php+mysql數(shù)據(jù)庫(kù)操作入門(mén)教程》及《php常見(jiàn)數(shù)據(jù)庫(kù)操作技巧匯總》
希望本文所述對(duì)大家基于Laravel框架的PHP程序設(shè)計(jì)有所幫助。
相關(guān)文章
PHP連接和操作MySQL數(shù)據(jù)庫(kù)基礎(chǔ)教程
這篇文章主要介紹了PHP連接和操作MySQL數(shù)據(jù)庫(kù)基礎(chǔ)教程,本文講解了mysql擴(kuò)展、連接數(shù)據(jù)庫(kù)、與數(shù)據(jù)庫(kù)交互等內(nèi)容,需要的朋友可以參考下2014-09-09
三個(gè)思路解決laravel上傳文件報(bào)錯(cuò):413 Request Entity Too Large問(wèn)題
上傳圖片的時(shí)候,是用laravel自帶的上傳圖片的方法,一下氣上傳了20張,結(jié)果就無(wú)情報(bào)錯(cuò):413 Request Entity Too Large,后面查一下,這個(gè)報(bào)錯(cuò)信息是nginx報(bào)的錯(cuò)誤,不是php報(bào)的錯(cuò)誤。也就是說(shuō)在上傳圖片的時(shí)候被nginx攔截了2017-11-11
ThinkPHP模板判斷輸出Defined標(biāo)簽用法詳解
這篇文章主要介紹了ThinkPHP模板判斷輸出Defined標(biāo)簽用法詳解,需要的朋友可以參考下2014-06-06
php技術(shù)實(shí)現(xiàn)加載字體并保存成圖片
這篇文章主要介紹了php技術(shù)實(shí)現(xiàn)加載字體并保存成圖片,需要的朋友可以參考下2015-07-07
laravel配置Redis多個(gè)庫(kù)的實(shí)現(xiàn)方法
這篇文章主要介紹了laravel配置Redis多個(gè)庫(kù)的實(shí)現(xiàn)方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-04-04
WordPress中獲取指定分類及其子分類下的文章數(shù)目
這篇文章主要介紹了WordPress中獲取指定分類及其子分類下的文章數(shù)目的方法,文中總結(jié)了一些相關(guān)內(nèi)置函數(shù)的使用,需要的朋友可以參考下2015-12-12

