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 相关文章推荐
用cookies来跟踪识别用户
Oct 09 PHP
php部分常见问题总结
Mar 27 PHP
PHP获取网卡地址的代码
Apr 09 PHP
PHP 反射机制实现动态代理的代码
Oct 22 PHP
PHP STRING 陷阱原理说明
Jul 24 PHP
PHPMYADMIN导入数据最大为2M的解决方法
Apr 23 PHP
coreseek 搜索英文的问题详解
Jun 08 PHP
PHP的Yii框架中YiiBase入口类的扩展写法示例
Mar 17 PHP
php简单获取复选框值的方法
May 11 PHP
PHP使用自定义方法实现数组合并示例
Jul 07 PHP
php微信开发之带参数二维码的使用
Aug 03 PHP
PHP手机短信验证码实现流程详解
May 17 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 session常见问题集锦及解决办法总结
2007/03/18 PHP
由php if 想到的些问题
2008/03/22 PHP
thinkPHP框架实现的简单计算器示例
2018/12/07 PHP
PHP实现的pdo连接数据库并插入数据功能简单示例
2019/03/30 PHP
tp5修改(实现即点即改)
2019/10/18 PHP
JS控件ASP.NET的treeview控件全选或者取消(示例代码)
2013/12/16 Javascript
跟我学习javascript的浮点数精度
2015/11/16 Javascript
javascript中checkbox使用方法实例演示
2015/11/19 Javascript
JQuery.Ajax()的data参数类型实例详解
2015/11/20 Javascript
js 自带的 map() 方法全面了解
2016/08/16 Javascript
AngularJS过滤器详解及示例代码
2016/08/16 Javascript
jquery根据一个值来选中select下的option实例代码
2016/08/29 Javascript
微信小程序-拍照或选择图片并上传文件
2017/01/06 Javascript
关于Bootstrap按钮组件消除黄框的方法
2017/05/19 Javascript
Vue实现web分页组件详解
2017/11/28 Javascript
jQuery中$原理实例分析
2018/08/13 jQuery
浅析Vue 中的 render 函数
2020/02/28 Javascript
[03:11]2014DOTA2国际邀请赛-VG掉入败者组 独家专访357
2014/07/19 DOTA
[03:16]DOTA2完美大师赛小组赛精彩集锦
2017/11/22 DOTA
基于循环神经网络(RNN)的古诗生成器
2018/03/26 Python
python实现简单tftp(基于udp协议)
2018/07/30 Python
Django应用程序入口WSGIHandler源码解析
2019/08/05 Python
CSS实现定位元素居中的方法
2015/06/23 HTML / CSS
HTML5中Localstorage的使用教程
2015/07/09 HTML / CSS
意大利综合购物网站:Giordano Shop
2016/10/21 全球购物
Falconeri美国官网:由羊绒和羊毛制成的针织服装
2018/04/08 全球购物
MYSQL基础面试题
2012/05/13 面试题
写给女朋友的道歉信
2014/01/12 职场文书
考试退步检讨书
2014/01/15 职场文书
领导班子四风对照检查材料范文
2014/09/27 职场文书
五好家庭申报材料
2014/12/20 职场文书
感谢信格式范文
2015/01/22 职场文书
Go语言中的UTF-8实现
2021/04/26 Golang
MySQL时间盲注的五种延时方法实现
2021/05/18 MySQL
Java面试题冲刺第十八天--Spring框架3
2021/08/07 面试题
索尼ICF-36收音机评测
2022/04/30 无线电