Laravel框架实现利用监听器进行sql语句记录功能


Posted in PHP onJune 06, 2018

本文实例讲述了Laravel框架实现利用监听器进行sql语句记录功能。分享给大家供大家参考,具体如下:

利用监听器进行sql语句记录

1、监听sql语句的事件类已经定义,直接创建监听器类即可:

# 监听sql
make:listener QueryListener --event=Illuminate\Database\Events\QueryExecuted

2、监听器类代码

./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、引入监听器

./app/Providers/EventServiceProvider.php

protected $listen = [
    ...
    \Illuminate\Database\Events\QueryExecuted::class => [
      'App\Listeners\QueryListener'
    ],
    ...
  ];

此时进行操作时就会记录sql日志

相关文章:

希望本文所述对大家基于Laravel框架的PHP程序设计有所帮助。

PHP 相关文章推荐
php set_magic_quotes_runtime() 函数过时解决方法
Jul 08 PHP
PHP验证码类代码( 最新修改,完全定制化! )
Dec 02 PHP
php去除重复字的实现代码
Sep 16 PHP
Windows下部署Apache+PHP+MySQL运行环境实战
Aug 31 PHP
php时间戳转换的示例
Mar 31 PHP
getimagesize获取图片尺寸实例
Nov 15 PHP
win7安装php框架Yii的方法
Jan 25 PHP
验证坐标在某坐标区域内php代码
Oct 08 PHP
使用PHP下载CSS文件中的所有图片【几行代码即可实现】
Dec 14 PHP
php获取文章内容第一张图片的方法示例
Jul 03 PHP
PHP编程文件处理类SplFileObject和SplFileInfo用法实例分析
Jul 22 PHP
php字符串过滤strip_tags()函数用法实例分析
Jun 24 PHP
Laravel框架实现利用中间件进行操作日志记录功能
Jun 06 #PHP
PHP实现的curl批量请求操作示例
Jun 06 #PHP
thinkPHP3.2.3实现阿里大于短信验证的方法
Jun 06 #PHP
Yii 访问 Gii(脚手架)时出现 403 错误
Jun 06 #PHP
PHP使用pdo连接access数据库并循环显示数据操作示例
Jun 05 #PHP
thinkPHP5框架设置404、403等http状态页面的方法
Jun 05 #PHP
PHP函数按引用传递参数及函数可选参数用法示例
Jun 04 #PHP
You might like
DC《小丑》11项提名领跑奥斯卡 Netflix成第92届奥斯卡提名最大赢家
2020/04/09 欧美动漫
抓取并下载CSS中所有图片文件的php代码
2011/09/26 PHP
PHP获取MAC地址的具体实例
2013/12/13 PHP
php基于str_pad实现卡号不足位数自动补0的方法
2014/11/12 PHP
php mysql 封装类实例代码
2016/09/18 PHP
Yii2使用表单上传文件的实例代码
2017/08/03 PHP
NodeJS框架Express的模板视图机制分析
2011/07/19 NodeJs
js模拟点击事件实现代码
2012/11/06 Javascript
原生js实现shift/ctrl/alt按键的获取
2013/04/08 Javascript
AngularJs 动态加载模块和依赖
2016/09/15 Javascript
angularjs实现的前端分页控件示例
2017/02/10 Javascript
js如何找出字符串中的最长回文串
2018/06/04 Javascript
浅析vue-router原理
2018/10/19 Javascript
Nuxt使用Vuex的方法示例
2019/09/06 Javascript
[03:20]2015国际邀请赛全明星表演赛
2015/08/08 DOTA
[41:13]完美世界DOTA2联赛PWL S2 Forest vs Rebirth 第一场 11.20
2020/11/20 DOTA
python执行shell获取硬件参数写入mysql的方法
2014/12/29 Python
Python中__name__的使用实例
2015/04/14 Python
Java及python正则表达式详解
2017/12/27 Python
python接口自动化(十六)--参数关联接口后传(详解)
2019/04/16 Python
django实现模型字段动态choice的操作
2020/04/01 Python
python3通过udp实现组播数据的发送和接收操作
2020/05/05 Python
keras 多任务多loss实例
2020/06/22 Python
python os.rename实例用法详解
2020/12/06 Python
Hotels.com英国:全球领先的酒店住宿提供商
2019/01/24 全球购物
阿里巴巴Oracle DBA笔试题答案-备份恢复类
2013/11/20 面试题
XML文档定义有几种形式?它们之间有何本质区别?解析XML文档有哪几种方式?
2016/01/12 面试题
儿科护理实习自我鉴定
2013/09/19 职场文书
数控技术应届生求职信
2013/11/13 职场文书
建筑总经理岗位职责
2014/02/02 职场文书
大学辅导员事迹材料
2014/02/05 职场文书
群教个人对照检查材料
2014/08/20 职场文书
政法干警核心价值观心得体会
2014/09/11 职场文书
钢琴师观后感
2015/06/12 职场文书
2015年秋季运动会加油稿
2015/07/22 职场文书
CocosCreator如何实现划过的位置显示纹理
2021/04/14 Javascript