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 相关文章推荐
Smarty+QUICKFORM小小演示
Feb 25 PHP
php preg_filter执行一个正则表达式搜索和替换
Feb 27 PHP
CURL状态码列表(详细)
Jun 27 PHP
PHP的preg_match匹配字符串长度问题解决方法
May 03 PHP
PHP图片裁剪函数(保持图像不变形)
May 04 PHP
thinkPHP分组后模板无法加载问题解决方法
Jul 12 PHP
php如何修改SESSION的生存存储时间的实例代码
Jul 05 PHP
php实现解析xml并生成sql语句的方法
Feb 03 PHP
详解PHP中mb_strpos的使用
Feb 04 PHP
PHP简单实现防止SQL注入的方法
Mar 13 PHP
Laravel框架Request、Response及Session操作示例
May 06 PHP
PHP实现文件上传后台处理脚本
Mar 04 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
可以文本显示的公告栏的js代码
2007/03/11 Javascript
JavaScript面向对象之体会[总结]
2008/11/13 Javascript
传智播客学习之java 反射
2009/11/22 Javascript
JavaScript传递变量: 值传递?引用传递?
2011/02/22 Javascript
jQuery EasyUI API 中文文档 - Menu菜单
2011/10/03 Javascript
jquery应该如何来设置改变按钮input的onclick事件
2012/12/10 Javascript
caller和callee的区别介绍及演示结果
2013/03/10 Javascript
Jquery chosen动态设置值实例介绍
2013/08/08 Javascript
利用javascript实现web页面中指定区域打印
2013/10/30 Javascript
javascript间隔定时器(延时定时器)学习 间隔调用和延时调用
2014/01/13 Javascript
extjs 分页使用jsp传递数据示例
2014/07/29 Javascript
jQuery插件windowScroll实现单屏滚动特效
2015/07/14 Javascript
JavaScript中获取纯正的undefined的方法
2016/03/06 Javascript
JavaScript的Ext JS框架中的GridPanel组件使用指南
2016/05/21 Javascript
JS实现图片垂直居中显示小结
2016/12/13 Javascript
浅谈js函数三种定义方式 &amp; 四种调用方式 &amp; 调用顺序
2017/02/19 Javascript
详解node.js 下载图片的 2 种方式
2018/03/02 Javascript
Vue.js 图标选择组件实践详解
2018/12/03 Javascript
JavaScript学习笔记之基于定时器实现图片无缝滚动功能详解
2019/01/09 Javascript
微信小程序点击保存图片到本机功能
2019/12/13 Javascript
JS实现横向轮播图(初级版)
2020/06/24 Javascript
如何编写一个 Webpack Loader的实现
2020/10/18 Javascript
python访问系统环境变量的方法
2015/04/29 Python
详解python之简单主机批量管理工具
2017/01/27 Python
Python实现的各种常见分布算法示例
2018/12/13 Python
python opencv对图像进行旋转且不裁剪图片的实现方法
2019/07/09 Python
Python importlib模块重载使用方法详解
2020/10/13 Python
Contém1g官网:巴西彩妆品牌
2020/01/17 全球购物
美国婴儿和儿童服装购物网站:PatPat
2020/10/01 全球购物
安全教育心得体会
2013/12/29 职场文书
春季运动会广播稿大全
2014/02/19 职场文书
党的群众路线教育实践活动个人整改方案
2014/10/25 职场文书
2015年体育教师个人工作总结
2015/05/12 职场文书
2016廉洁教育心得体会
2016/01/20 职场文书
经典格言警句:没有热忱,世间便无进步
2019/11/13 职场文书
Python实现数据的序列化操作详解
2022/07/07 Python