ThinkPHP执行调用存储过程添加日志
本文出至:新太潮流网络博客
//PHP代码部分 /**
* [LogAdd 操作日志]
* @param [string] $userid [用户的ID]
* @param [string] $type [类型]
* @param [string] $controller_name [当前控制器的中文名称]
* @param [string] $function_name [当前方法的中文名称]
*/
function LogAdd($userid,$type,$controller_name,$function_name){
//组合数据
$data['userid'] = $userid;//当前操作的用户
$data['type'] = $type;//当前操作的类型
$data['url'] = 'http://'.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'];//当前操作的URL地址
$data['controller'] = CONTROLLER_NAME;//当前控制器的名称
$data['controller_name'] = $controller_name;//当前控制器的中文名称
$data['function'] = ACTION_NAME;//当前方法的名称
$data['function_name'] = $function_name;//当前方法的中文名称
$data['ip'] = getClientIP();//IP地址
$data['create_time'] = date('Y-m-d H:i:s',time());//登录时间
//表名
$data_fun = 't_sys_logs_'.date('Y',time());
//执行原生SQL
$Model = M();
$results = $Model->query('show tables');//打开库
//组装为一维数组进行判断
foreach($results as $k=>$v){
$data_table_show[] = $v['tables_in_dbwxapplite'];
}
//先判断是否存在表
if(in_array(strtolower($data_fun), $data_table_show)){ //存在表直接添加日志
$loginLog = M($data_fun)->add($data);
if($loginLog != false){
$res = ['status' => '1','result' => '写入成功','data' => $loginLog];
}else{
$res = ['status' => '0','result' => '写入失败','data' => $loginLog];
}
}else{
//不存在表,先调用存储过程,在执行添加日志
$code = $Model->query("call spCreateTableSysLogs(".date('Y',time()).")");
if($code){
//存储过程成功则添加数据
$loginLog = M($data_fun)->add($data);
if($loginLog != false){
$res = ['status' => '1','result' => '写入成功','data' => $loginLog];
}else{
$res = ['status' => '0','result' => '写入失败','data' => $loginLog];
}
}else{
//失败
$res = ['status' => '0','result' => '存储过程调用失败','data' => $loginLog];
}
}
return $res;
}
//MySQL脚本数据库部分 -- ----------------------------
-- Table structure for t_sys_logs_2017
-- ----------------------------
DROP TABLE IF EXISTS `t_sys_logs_2017`;
CREATE TABLE `t_sys_logs_2017` (
`logid` int(11) NOT NULL AUTO_INCREMENT COMMENT '日志ID',
`userid` varchar(32) NOT NULL DEFAULT '0' COMMENT '创建人ID',
`type` varchar(8) NOT NULL COMMENT '日志操作类型,如:登录;注销;退出;修改密码;创建报名',
`url` varchar(100) NOT NULL DEFAULT 'www' COMMENT '当前操作的URL',
`controller` varchar(30) NOT NULL DEFAULT '控制器的名称' COMMENT '当前控制器的名称',
`controller_name` varchar(30) NOT NULL DEFAULT '控制器的中文名称' COMMENT '当前控制器的中文名称',
`function` varchar(30) NOT NULL DEFAULT '方法的名称' COMMENT '当前方法的名称',
`function_name` varchar(30) NOT NULL DEFAULT '方法的中文名称' COMMENT '当前方法的中文名称',
`ip` varchar(30) NOT NULL DEFAULT '255.255.255.255' COMMENT '当前操作客户端IP',
`create_time` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00' COMMENT '创建时间',
`update_time` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00' ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
PRIMARY KEY (`logid`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb4 COMMENT='操作日志表';
本文出至:新太潮流网络博客
ThinkPHP执行调用存储过程添加日志的更多相关文章
- mysql 触发器检测表数据添加,进而调用存储过程检测数据,进而调用存储过程添加数据
触发器: beginDECLARE user_mes INT(64);SELECT user_id into user_mes FROM order_orderlist where id = new. ...
- JDBC调用存储过程的例子
下面是我学到了Oracle存储过程,在这里跟大家简单的分享一下利用JDBC调用存储过程的例子: 废话就不啰嗦,现在就直接上机代码. 首先我利用的是Oracle中默认的 scott 数据库里的 emp员 ...
- MySQL— 索引,视图,触发器,函数,存储过程,执行计划,慢日志,分页性能
一.索引,分页性能,执行计划,慢日志 (1)索引的种类,创建语句,名词补充(最左前缀匹配,覆盖索引,索引合并,局部索引等): import sys # http://www.cnblogs.com/w ...
- C#调用存储过程执行缓慢,但在数据库中执行却很快的问题
参考: http://www.debugease.com/mssqlbasic/976568.html https://www.cnblogs.com/Irving/p/3951220.html ht ...
- Oracle定时任务执行存储过程备份日志记录表
写在前面 需求 1.备份系统日志表T_S_LOG, 按照操作时间字段OPERATETIME, 将每天的日志增量备份到另一张表. 思路 1.创建一张数据结构完全相同的表T_S_LOG_BAK作为备份表 ...
- jdbc执行预处理,批处理,LOB字段处理,调用存储过程
(1)jdbc执行预处理 PreparedStatment预备语句 eg:String sql="insert into user(id,name,birthday,money) value ...
- hibernate的update() 更新延迟或者无法更新,导致同个service调用存储过程执行方法不精确
hibernate的update()方法无法更新,不报错 原因是hibernate的update方法操作的是缓存,可以flush下先. 设置缓存为false理论上也可. 在一个serivce方法里,执 ...
- sql server service broker中调用存储过程执行跨库操作,不管怎么设置都一直提示 服务器主体 "sa" 无法在当前安全上下文下访问数据库 "dbname"。
用sql server自带的消息队列service borker,调用存储过程中,执行了一个跨库的操作,先是用了一个用户,权限什么都给够了,但是一直提示 服务器主体 "user" ...
- 关于 VS 调用存储过程加载很慢和SQL 执行很快的那些事
执行同样的存储过程,调用同样的参数 在VS 中调用存储过程和传参后,到数据加载需要20秒或更多, 在SQL直接调用则不到一秒,同一个存储过程为什么有这么大的区别呢? 原因:存储过程计划失效的原因 产生 ...
随机推荐
- Spring Security构建Rest服务-1400-授权
安全分为 认证和授权,前边讲的都是认证,现在说授权. 前端业务系统的权限简单些,一般只区分是否登录,复杂点的还会区分 VIP用户等简单的角色,权限规则基本不变. 后台系统比较复杂,角色众多,权限随着业 ...
- asp.net三种方法实现事务
事务处理是在数据处理时经常遇到的问题,经常用到的方法有以下三种总结整理如下:方法1:直接写入到sql 中在存储过程中使用 BEGIN TRANS, COMMIT TRANS, ROLLBACK TRA ...
- [PY3]——发送邮件
一些概念 MUA:Mail User Agent——邮件用户代理,例如OutLook.Foxmail MTA:Mail Transfer Agent——邮件传输代理,例如163.com.sina.co ...
- Mysql——权限管理
安装Mysql时会自动安装一个名为mysql的数据库.这个数据库下面存储的是权限表. mysql> show databases; +--------------------+ | Databa ...
- 为 Nginx 创建 windows 服务自启动
1.下载最新版的 Windows Service Wrapper 程序 下载地址:http://download.java.net/maven/2/com/sun/winsw/winsw/1.9/ 2 ...
- ActiveMQ专题1: 入门实例
序 好久没有写博客了,最近真的是可以说是忙成狗了.项目的事和自己的终身大事忙得焦头烂额,好在是一切都是越来越好了...... 趁着项目今天唯一的一点喘息时间,加上项目开始接触到的mq,开始写一篇amq ...
- Django 多表查询
多表查询是模型层的重要功能之一, Django提供了一套基于关联字段独特的解决方案. ForeignKey 来自Django官方文档的模型示例: from django.db import model ...
- SqlServer入门学习
--distinct(去除重复数据)select distinct Time from HightTable--Between select * from HightTable where ID BE ...
- linux总结之find搜索文件(times 3)
个人原创,转自请在文章头部显眼位置注明出处:https://www.cnblogs.com/sunshine5683/p/10091341.html find命令的各种搜索 一.根据文件名进行查找 命 ...
- Python import搜索的路径顺序
在程序中导入时,如下顺序 1.Python 标准库模块2.Python 第三方模块3.应用程序自定义模块 import的搜索顺序: 首先判断这个module是不是built-in即内建模块,如果是 ...