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获取本周,上周,本月,上月,本季度日期的代码
Aug 05 PHP
用PHP即时捕捉PHP中的错误并发送email通知的实现代码
Jan 19 PHP
利用php绘制饼状图的实现代码
Jun 07 PHP
基于PHP magic_quotes_gpc的使用方法详解
Jun 24 PHP
CI框架中集成CKEditor编辑器的教程
Jun 09 PHP
PHP中cookie和session的区别实例分析
Aug 28 PHP
Yii的CDbCriteria查询条件用法实例
Dec 04 PHP
php判断文件夹是否存在不存在则创建
Apr 09 PHP
PHP创建文件,并向文件中写入数据,覆盖,追加的实现代码
Mar 25 PHP
PHP中Trait及其应用详解
Feb 14 PHP
PHP删除二维数组中相同元素及数组重复值的方法示例
May 05 PHP
Laravel框架实现的批量删除功能示例
Jan 16 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下escape解码函数的实现方法
2010/08/08 PHP
PHP使用stream_context_create()模拟POST/GET请求的方法
2016/04/02 PHP
PHP对称加密算法(DES/AES)类的实现代码
2017/11/14 PHP
PHP性能分析工具xhprof的安装使用与注意事项
2017/12/19 PHP
文字幻灯片
2006/06/26 Javascript
基于jQuery制作迷你背词汇工具
2010/07/27 Javascript
让JavaScript拥有类似Lambda表达式编程能力的方法
2010/09/12 Javascript
Javascript 类型转换方法
2010/10/24 Javascript
JavaScript获取当前页面上的指定对象示例代码
2014/02/28 Javascript
javascript定义变量时有var和没有var的区别探讨
2014/07/21 Javascript
jQuery实现的动态伸缩导航菜单实例
2015/05/07 Javascript
BootStrap的JS插件之轮播效果案例详解
2016/05/16 Javascript
再谈Javascript中的异步以及如何异步
2016/08/19 Javascript
JavaScript实现星星等级评价功能
2017/03/22 Javascript
原生JS实现N级菜单的代码
2017/05/21 Javascript
Vue自定义指令详解
2017/07/28 Javascript
javascript中的replace函数(带注释demo)
2018/01/07 Javascript
浅谈vue引用静态资源需要注意的事项
2018/09/28 Javascript
jQuery选择器之基本选择器用法实例分析
2019/02/19 jQuery
JavaScrip如果基于url实现图片下载
2020/07/03 Javascript
Vue组件跨层级获取组件操作
2020/07/27 Javascript
three.js如何实现3D动态文字效果
2021/03/03 Javascript
[04:22]DOTA2上海特级锦标赛主赛事第四日TOP10
2016/03/06 DOTA
python冒泡排序算法的实现代码
2013/11/21 Python
详解Python程序与服务器连接的WSGI接口
2015/04/29 Python
Python生成随机验证码的两种方法
2015/12/22 Python
python 出现SyntaxError: non-keyword arg after keyword arg错误解决办法
2017/02/14 Python
Python登录系统界面实现详解
2019/06/25 Python
python uuid生成唯一id或str的最简单案例
2021/01/13 Python
HTML5中input[type='date']自定义样式与日历校验功能的实现代码
2017/07/11 HTML / CSS
Clarins娇韵诗美国官网:法国天然护肤品牌
2016/09/26 全球购物
春季防火方案
2014/05/10 职场文书
初中学校对照检查材料
2014/08/19 职场文书
《周恩来的四个昼夜》观后思想汇报范文两篇
2014/09/10 职场文书
个人股份合作协议书
2014/10/24 职场文书
大学生创业计划书常用模板
2019/08/07 职场文书