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

//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. .Net WEB 程序员需要掌握的技能

    原文链接:http://deshui.wang/%E6%8A%80%E6%9C%AF/2015/05/12/net-study-road 基础部分 C# 基础语法 OOP的概念,面向对象的理解 继承 ...

  2. nginx添加多站点

    1.登陆服务器2.修改ngnix配置文件3.重启ngnix4.测试是否添加成功 修改/nginx/conf/nginx.confviminclude /alidata/server/nginx/con ...

  3. IE6基本bug

    一.IE6双倍边距bug当页面上的元素使用float浮动时,不管是向左还是向右浮动:只要该元素带有margin像素都会使该值乘以2,例如“margin-left:10px” 在IE6中,该值就会被解析 ...

  4. PyCharm2018专业版激活步骤

    激活步骤: 1.更改hosts文件,2 获取注册码,  3 完成注册. 1. 更改host文件 hosts文件的路径 : c:\windows\system32\drivers\etc\hosts 将 ...

  5. google glog 使用方法

    #include <glog/logging.h> int main(int argc,char* argv[]) { google::ParseCommandLineFlags(& ...

  6. Mysql的预编译和批处理

    MySQL的预编译功能 预编译的好处 大家平时都使用过JDBC中的PreparedStatement接口,它有预编译功能.什么是预编译功能呢?它有什么好处呢? 当客户发送一条SQL语句给服务器后,服务 ...

  7. json list数据递归生成树状层级JSON

    <!DOCTYPE html> <html> <head> <script> var data=[ {"id":"aaa& ...

  8. IE浏览器TAB清空设置

    1.Regedit 2.HKEY_USERS——搜索NewTabPage 3.清空除了Default之外的所有东西 4.也可以添加NumRows——TAB的行数 可以参考:http://tieba.b ...

  9. 008.在C#中,显式接口VS隐式接口

    原文http://www.codeproject.com/Articles/1000374/Explicit-Interface-VS-Implicit-Interface-in-Csharp (At ...

  10. Android DiskLruCache完全解析,硬盘缓存的最佳方案

    Android DiskLruCache完全解析,硬盘缓存的最佳方案 概述   记得在很早之前,我有写过一篇文章Android高效加载大图.多图解决方案,有效避免程序OOM,这篇文章是翻译自Andro ...