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入门速成(2)
Oct 09 PHP
让你的网站首页自动选择语言转跳
Dec 06 PHP
MayFish PHP的MVC架构的开发框架
Aug 13 PHP
php快速url重写更新版[需php 5.30以上]
Apr 25 PHP
PHP图片验证码制作实现分享(全)
May 10 PHP
php用正则表达式匹配中文实例详解
Nov 06 PHP
PHP解码unicode编码的中文字符代码分享
Aug 13 PHP
php实现的用户查询类实例
Jun 18 PHP
PHP hex2bin()函数用法讲解
Feb 25 PHP
PHP中单例模式的使用场景与使用方法讲解
Mar 18 PHP
深入学习微信网址链接解封的防封原理visit_type
Aug 15 PHP
PHP使用Redis队列执行定时任务实例讲解
Mar 24 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
关于尾递归的使用详解
2013/05/02 PHP
PHP实现的简单排列组合算法应用示例
2017/06/20 PHP
利用jQuery 实现GridView异步排序、分页的代码
2010/02/06 Javascript
jquery关于页面焦点的定位(文本框获取焦点时改变样式 )
2010/09/10 Javascript
jquery图片放大镜功能的实例代码
2013/03/26 Javascript
js/jquery判断浏览器的方法小结
2014/09/02 Javascript
浅谈javascript 迭代方法
2015/01/21 Javascript
Vue单页面应用保证F5强刷不清空数据的解决方案
2018/01/31 Javascript
详细介绍解决vue和jsp结合的方法
2020/02/06 Javascript
[41:08]TNC vs VG 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
python登陆asp网站页面的实现代码
2015/01/14 Python
Python检测一个对象是否为字符串类的方法
2015/05/21 Python
Python使用三种方法实现PCA算法
2017/12/12 Python
Python3实现带附件的定时发送邮件功能
2020/12/22 Python
python和flask中返回JSON数据的方法
2018/03/26 Python
python实现机器学习之元线性回归
2018/09/06 Python
Python基于聚类算法实现密度聚类(DBSCAN)计算【测试可用】
2018/12/26 Python
详解用python自制微信机器人,定时发送天气预报
2019/03/25 Python
python生成任意频率正弦波方式
2020/02/25 Python
python GUI库图形界面开发之PyQt5单行文本框控件QLineEdit详细使用方法与实例
2020/02/27 Python
使用wxpy实现自动发送微信消息功能
2020/02/28 Python
Java Unsafe类实现原理及测试代码
2020/09/15 Python
关于探究python中sys.argv时遇到的问题详解
2021/02/23 Python
多重CSS背景动画实现方法示例
2014/04/04 HTML / CSS
canvas像素画板的实现代码
2018/11/21 HTML / CSS
德国体育用品网上商店:SC24.com
2016/08/01 全球购物
施华洛世奇新加坡官网:SWAROVSKI新加坡
2020/10/06 全球购物
告诉你怎样写创业计划书
2014/01/27 职场文书
简历的自我评价范文
2014/02/04 职场文书
《商鞅南门立木》教学反思
2014/02/16 职场文书
美术兴趣小组活动总结
2014/07/07 职场文书
小学国庆节活动方案策划书
2014/09/16 职场文书
党员对照检查材料思想汇报(党的群众路线)
2014/09/24 职场文书
金融专业银行实习证明模板
2014/11/28 职场文书
2016年小学端午节活动总结
2016/04/01 职场文书
浅谈自定义校验注解ConstraintValidator
2021/06/30 Java/Android