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 相关文章推荐
第六节 访问属性和方法 [6]
Oct 09 PHP
PHP中include()与require()的区别说明
Mar 10 PHP
PHP中PDO的错误处理
Sep 04 PHP
php实现使用正则将文本中的网址转换成链接标签
Dec 03 PHP
php对关联数组循环遍历的实现方法
Mar 13 PHP
PHP数组和explode函数示例总结
May 08 PHP
php metaphone()函数及php localeconv() 函数实例解析
May 15 PHP
Laravel框架中自定义模板指令总结
Dec 17 PHP
php-app开发接口加密详解
Apr 18 PHP
PHP多个图片压缩成ZIP的方法
Aug 18 PHP
ThinkPHP5+Layui实现图片上传加预览功能
Aug 17 PHP
详解PHP 7.4 中数组延展操作符语法知识点
Jul 19 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
PHP获取指定时间段之间的 年,月,天,时,分,秒
2016/06/05 PHP
封装好的省市地区联动控件附下载
2007/08/13 Javascript
最近项目写了一些js,水平有待提高
2009/01/31 Javascript
jquery中的$(document).ready()与window.onload的区别
2009/11/18 Javascript
Javascript string 扩展库代码
2010/04/09 Javascript
js修改input的type属性问题探讨
2013/10/12 Javascript
Jquery方式获取iframe页面中的 Dom元素
2014/05/07 Javascript
Javascript实现单张图片浏览
2014/12/18 Javascript
JavaScript匿名函数用法分析
2015/02/13 Javascript
理解 JavaScript Scoping &amp; Hoisting(二)
2015/11/18 Javascript
jQuery实现底部浮动窗口效果
2016/09/07 Javascript
jQuery实现贪吃蛇小游戏(附源码下载)
2017/03/04 Javascript
Angular 4环境准备与Angular cli创建项目详解
2017/05/27 Javascript
Vue中的v-for循环key属性注意事项小结
2018/08/12 Javascript
layui 富文本编辑器和textarea值的相互传递方法
2019/09/18 Javascript
[56:45]DOTA2上海特级锦标赛D组小组赛#1 EG VS COL第一局
2016/02/28 DOTA
Python原始字符串(raw strings)用法实例
2014/10/13 Python
python 读取目录下csv文件并绘制曲线v111的方法
2018/07/06 Python
详解python中的线程与线程池
2019/05/10 Python
Pytorch反向求导更新网络参数的方法
2019/08/17 Python
pycharm软件实现设置自动保存操作
2020/06/08 Python
keras 获取某层的输入/输出 tensor 尺寸操作
2020/06/10 Python
西安夏日科技有限公司Java笔试题
2013/01/11 面试题
Servlet面试题库
2015/07/18 面试题
园林设计师自荐信
2013/11/18 职场文书
师范大学应届生求职信
2013/11/21 职场文书
一年级班主任寄语
2014/01/19 职场文书
个人实习生的自我评价
2014/02/16 职场文书
篮球赛口号
2014/06/18 职场文书
2014年中秋寄语
2014/08/11 职场文书
2014年大学生党员自我评议
2014/09/22 职场文书
整改报告格式
2014/11/06 职场文书
碧霞祠导游词
2015/02/09 职场文书
MySQL中出现乱码问题的终极解决宝典
2021/05/26 MySQL
nginx的zabbix 5.0安装部署的方法步骤
2021/07/16 Servers
Java线程的6种状态与生命周期
2022/05/11 Java/Android