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伪静态页面函数附使用方法
Jun 20 PHP
从Web查询数据库之PHP与MySQL篇
Sep 25 PHP
php is_file 判断给定文件名是否为一个正常的文件
May 10 PHP
php数组函数序列之ksort()对数组的元素键名进行升序排序,保持索引关系
Nov 02 PHP
php array的学习笔记
May 16 PHP
PHP写的求多项式导数的函数代码
Jul 04 PHP
win7 64位系统 配置php最新版开发环境(php+Apache+mysql)
Aug 15 PHP
php通过array_merge()函数合并关联和非关联数组的方法
Mar 18 PHP
php源码分析之DZX1.5加密解密函数authcode用法
Jun 17 PHP
php redis实现对200w用户的即时推送
Mar 04 PHP
php中的explode()函数实例介绍
Jan 18 PHP
PHP配合fiddler抓包抓取微信指数小程序数据的实现方法分析
Jan 02 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
CodeIgniter框架中_remap()使用方法2例
2014/03/10 PHP
php简单实现短网址(短链)还原的方法(测试可用)
2016/05/09 PHP
phpmyadmin下载、安装、配置教程
2017/05/16 PHP
一个JavaScript继承的实现
2006/10/24 Javascript
在网页里看flash的trace数据的js类
2009/01/10 Javascript
70+漂亮且极具亲和力的导航菜单设计国外网站推荐
2011/09/20 Javascript
js时间日期和毫秒的相互转换
2013/02/22 Javascript
node.js中的fs.fchownSync方法使用说明
2014/12/16 Javascript
js操作css属性实现div层展开关闭效果的方法
2015/05/11 Javascript
JavaScript的Date()方法使用详解
2015/06/09 Javascript
jQuery右下角旋转环状菜单特效代码
2015/08/10 Javascript
浅谈javascript控制HTML5的全屏操控,浏览器兼容的问题
2016/10/10 Javascript
js实现表格筛选功能
2017/01/18 Javascript
Node.js进阶之核心模块https入门
2018/05/23 Javascript
nodejs实现套接字服务功能详解
2018/06/21 NodeJs
JS限制输入框输入的实现代码
2018/07/02 Javascript
nodejs基础之buffer缓冲区用法分析
2018/12/26 NodeJs
[28:42]Ti4正赛VG vs NEWBEE1
2014/07/19 DOTA
jupyter安装小结
2016/03/13 Python
python实现决策树
2017/12/21 Python
对python 多线程中的守护线程与join的用法详解
2019/02/18 Python
Python 获取指定文件夹下的目录和文件的实现
2019/08/30 Python
Pandas将列表(List)转换为数据框(Dataframe)
2020/04/24 Python
HTML5实现音频和视频嵌入的方法
2018/08/22 HTML / CSS
佳能法国商店:Canon法国
2019/02/14 全球购物
贪睡宠物用品:Snoozer Pet Products
2020/02/04 全球购物
50岁生日感言
2014/01/23 职场文书
小学运动会班级口号
2014/06/09 职场文书
搞笑车尾标语
2014/06/23 职场文书
2014年管理人员工作总结
2014/12/01 职场文书
关爱留守儿童捐款倡议书
2015/04/27 职场文书
单方投资意向书
2015/05/11 职场文书
婚礼家长致辞
2015/07/27 职场文书
珍爱生命主题班会
2015/08/13 职场文书
2016学习依法治国心得体会
2016/01/15 职场文书
Java基础之详解HashSet的使用方法
2021/06/30 Java/Android