本文出至:新太潮流网络博客

//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执行调用存储过程添加日志的更多相关文章

  1. mysql 触发器检测表数据添加,进而调用存储过程检测数据,进而调用存储过程添加数据

    触发器: beginDECLARE user_mes INT(64);SELECT user_id into user_mes FROM order_orderlist where id = new. ...

  2. JDBC调用存储过程的例子

    下面是我学到了Oracle存储过程,在这里跟大家简单的分享一下利用JDBC调用存储过程的例子: 废话就不啰嗦,现在就直接上机代码. 首先我利用的是Oracle中默认的 scott 数据库里的 emp员 ...

  3. MySQL— 索引,视图,触发器,函数,存储过程,执行计划,慢日志,分页性能

    一.索引,分页性能,执行计划,慢日志 (1)索引的种类,创建语句,名词补充(最左前缀匹配,覆盖索引,索引合并,局部索引等): import sys # http://www.cnblogs.com/w ...

  4. C#调用存储过程执行缓慢,但在数据库中执行却很快的问题

    参考: http://www.debugease.com/mssqlbasic/976568.html https://www.cnblogs.com/Irving/p/3951220.html ht ...

  5. Oracle定时任务执行存储过程备份日志记录表

    写在前面 需求 1.备份系统日志表T_S_LOG, 按照操作时间字段OPERATETIME, 将每天的日志增量备份到另一张表. 思路 1.创建一张数据结构完全相同的表T_S_LOG_BAK作为备份表 ...

  6. jdbc执行预处理,批处理,LOB字段处理,调用存储过程

    (1)jdbc执行预处理 PreparedStatment预备语句 eg:String sql="insert into user(id,name,birthday,money) value ...

  7. hibernate的update() 更新延迟或者无法更新,导致同个service调用存储过程执行方法不精确

    hibernate的update()方法无法更新,不报错 原因是hibernate的update方法操作的是缓存,可以flush下先. 设置缓存为false理论上也可. 在一个serivce方法里,执 ...

  8. sql server service broker中调用存储过程执行跨库操作,不管怎么设置都一直提示 服务器主体 "sa" 无法在当前安全上下文下访问数据库 "dbname"。

    用sql server自带的消息队列service borker,调用存储过程中,执行了一个跨库的操作,先是用了一个用户,权限什么都给够了,但是一直提示 服务器主体 "user" ...

  9. 关于 VS 调用存储过程加载很慢和SQL 执行很快的那些事

    执行同样的存储过程,调用同样的参数 在VS 中调用存储过程和传参后,到数据加载需要20秒或更多, 在SQL直接调用则不到一秒,同一个存储过程为什么有这么大的区别呢? 原因:存储过程计划失效的原因 产生 ...

随机推荐

  1. 【数组】Next Permutation

    题目: Implement next permutation, which rearranges numbers into the lexicographically next greater per ...

  2. Glide的用法

    最基本用法 glide采用的都是流接口方式 简单的从网络加载图片 Glide.with(context).load(internetUrl).into(targetImageView); 从文件加载 ...

  3. 深入理解Java虚拟机:第2章 Java内存区域与内存溢出异常

    目录 2.2 运行时数据区域 Java堆 方法区 虚拟机栈 本地方法栈 程序计数器 2.3 HotSpot虚拟机对象探秘 对象的创建 对象的内存布局 对象的访问定位   2.2 运行时数据区域 Jav ...

  4. spark job运行参数优化

    http://www.cnblogs.com/LBSer/p/4129481.html 一.问题 使用spark join两张表(5000w*500w)总是出错,报的异常显示是在shuffle阶段. ...

  5. 云存储(Swift+Keystone)部署策略

    Swift是OpenStack的对象存储模块,Keystone是OpenStack的权限验证模块.可以于这两个模块搭建一个较为完善的云存储系统. 1.官方方案 云存储的服务器分三种类型: 验证节点 A ...

  6. 19.Decorator修饰器

    Decorator 修饰器 类的修饰 许多面向对象的语言都有修饰器(Decorator)函数,用来修改类的行为.目前,有一个提案将这项功能,引入了 ECMAScript. @testable clas ...

  7. mariadb(mysql)从库relaylog损坏无法同步的处理方法

    故障说明 晚上备用服务器自动重启,收到报警,备用服务器上的mariadb从库无法去同步主库.启动mariadb后,报如下错误(重点看红色字体)  mariadb_1 | -- :: [Note] Pl ...

  8. SQL中的go、begin、end的用法

    go 向 SQL Server 实用工具发出一批 Transact-SQL 语句结束的信号.go是把t-sql语句分批次执行.(一步成功了才会执行下一步,即一步一个go) BEGIN 和 END 语句 ...

  9. 使用<% =Type%>获取后台值时报错:控件包含代码块(即 <% ... %>),因此无法修改控件集合。

    <% =Type%>不能放在runat="server"的标签中,删掉runat="server"之后dev的控件回调第一次发生时会刷新页面,有ru ...

  10. 使用CSS进行定位

    CSS中通过使用position属性,有4种不同类型的定位方式,这会影响元素框生成的方式. position属性值的含义: static:静态定位 元素框正常生成.块级元素生成一个矩形框,作为文档流的 ...