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 相关文章推荐
3.从实例开始
Oct 09 PHP
php去掉字符串的最后一个字符附substr()的用法
Mar 23 PHP
PHP异步调用socket实现代码
Jan 12 PHP
修改php.ini不生效问题解决方法(上传大于8M的文件)
Jun 14 PHP
php删除数组元素示例分享
Feb 17 PHP
PHP类的反射用法实例
Nov 03 PHP
php获得文件大小和文件创建时间的方法
Mar 13 PHP
php目录拷贝实现方法
Jul 10 PHP
Yii数据库缓存实例分析
Mar 29 PHP
PHP url的pathinfo模式加载不同控制器的简单实现
Aug 12 PHP
PHPMailer使用QQ邮箱实现邮件发送功能
Aug 18 PHP
解决laravel资源加载路径设置的问题
Oct 14 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防止页面重复刷新的具体实现
2014/01/09 PHP
Yii2创建控制器(createController)方法详解
2016/07/23 PHP
php+resumablejs实现的分块上传 断点续传功能示例
2017/04/18 PHP
PHP实现的贪婪算法实例
2017/10/17 PHP
jquery1.4后 jqDrag 拖动 不可用
2010/02/06 Javascript
使用jquery实现IE下按backspace相当于返回操作
2014/03/18 Javascript
javascript实现ecshop搜索框键盘上下键切换控制
2015/03/18 Javascript
JQuery移动页面开发之屏幕方向改变与滚屏的实现
2015/12/03 Javascript
基于jQuery的网页影音播放器jPlayer的基本使用教程
2016/03/08 Javascript
jQuery插件Flexslider实现图片轮播、图文结合滑动切换效果
2020/04/16 Javascript
jQuery 获取遍历获取table中每一个tr中的第一个td的方法
2016/10/05 Javascript
Vue.js实现无限加载与分页功能开发
2016/11/03 Javascript
vue组件实现文字居中对齐的方法
2017/08/23 Javascript
基于jQuery选择器之表单对象属性筛选选择器的实例
2017/09/19 jQuery
jquery animate动画持续运动的实例
2017/11/29 jQuery
Angular CLI在Angular项目中如何使用scss详解
2018/04/10 Javascript
Vue使用vux-ui自定义表单验证遇到的问题及解决方法
2018/05/10 Javascript
简单明了区分escape、encodeURI和encodeURIComponent
2018/05/26 Javascript
Vuex 使用及简单实例(计数器)
2018/08/29 Javascript
详解Vue组件之间通信的七种方式
2019/04/14 Javascript
Vue实现兄弟组件间的联动效果
2020/01/21 Javascript
原生JavaScript实现随机点名表
2021/01/14 Javascript
Python内置函数的用法实例教程
2014/09/08 Python
python字符串与url编码的转换实例
2018/05/10 Python
Python实现的网页截图功能【PyQt4与selenium组件】
2018/07/12 Python
解决Pycharm运行时找不到文件的问题
2018/10/29 Python
python实现快速文件格式批量转换的方法
2020/10/16 Python
css3实现3D色子翻转特效
2014/12/23 HTML / CSS
Pandora西班牙官方商店:PandoraShop.es
2020/10/05 全球购物
软件测试面试题
2015/10/21 面试题
大学生毕业自我鉴定范文
2013/09/19 职场文书
媒矿安全生产承诺书
2014/05/23 职场文书
幼儿园大班教师个人工作总结
2015/02/05 职场文书
2015年爱国卫生月活动总结
2015/03/26 职场文书
英语投诉信范文
2015/07/03 职场文书
tensorflow中的梯度求解及梯度裁剪操作
2021/05/26 Python