怎么写redis db pdo类
发表于:2025-12-01 作者:千家信息网编辑
千家信息网最后更新 2025年12月01日,这篇文章主要介绍"怎么写redis db pdo类",在日常操作中,相信很多人在怎么写redis db pdo类问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"怎么写re
千家信息网最后更新 2025年12月01日怎么写redis db pdo类
这篇文章主要介绍"怎么写redis db pdo类",在日常操作中,相信很多人在怎么写redis db pdo类问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"怎么写redis db pdo类"的疑惑有所帮助!接下来,请跟着小编一起来学习吧!
null, 'wheresql' => null, 'orderBy' => null, 'limit' => null, 'up' => null, 'ins' => null, 'group' => null, 'fields' => null, ]; private $type; private $tablename; private $deBug = false; public function __construct( $data = []) { if($data){ $this->_setDbDrive($data); } } private function _setDbDrive($dbConf){ $dns = 'mysql:host='.$dbConf['db_ip'].';dbname='.$dbConf['db_name'].';charset=utf8mb4'; try { $db = new \PDO($dns,$dbConf['db_user'],$dbConf['db_pass']); } catch(\PDOException $e) { die('Could not connect to the database:
' . $e); } $this->conn[$dbConf['name']] = $db; } /** * 判断是否创建连接 * @param $table */ private function checkTable($table){ //获取表库信息 $db_info = _getDBIP($table); $this->sql = [];//重置缓存 $this->type = $db_info['name'];//缓存库信息 //初始化连接 if(!isset($this->conn[$db_info['name']])){ $this->_setDbDrive($db_info); } $this->tablename = $table; } public function table($tablename) { $this->checkTable($tablename); return $this; } public function select($fields = '*') { $sql = sprintf("SELECT %s FROM %s", $fields, $this->tablename); $this->sql['fields'] = $fields; if(!empty($this->sql['where'])) { $sql .= ' WHERE ' . $this->sql['wheresql']; } if(!empty($this->sql['orderBy'])) { $sql .= ' ORDER BY ' . $this->sql['orderBy']; } if(!empty($this->sql['limit'])) { $sql .= ' LIMIT ' . $this->sql['limit']; } if(!empty($this->sql['group'])) { $sql .= ' GROUP BY ' . $this->sql['group']; } return $this->_select($sql); } public function deBug(){ $this->deBug = true; return $this; } public function find($fields = '*') { $this->limit(1); $result = $this->select($fields); return $result; } public function insert($data) { $keys = "`".implode('`,`', array_keys($data))."`"; $values = ":i".implode(", :i", array_keys($data)); $this->sql['ins'] = $data; $querySql = sprintf("INSERT INTO %s ( %s ) VALUES ( %s )", $this->tablename, $keys, $values); return $this->_insert($querySql); } public function delete() { if(!$this->sql['where']) return false; $querySql = sprintf("DELETE FROM %s WHERE ( %s )", $this->tablename, $this->sql['wheresql']); return $this->_update($querySql); } /** * 传入数组 ['apid'=>['+',15],'bpid'=>105] 目前二位数组仅支持 加减 * @param $data * @return mixed */ public function update($data) { $updateFields = []; foreach ($data as $key => $value) { if(!is_array($value)){ $updateFields[] = "`$key`=:u{$key} "; }else{ $updateFields[] = "`$key`= `{$key}` {$value[0]} {$value[1]}"; unset($data[$key]); } } $this->sql['up'] = $data; $updateFields = implode(',', $updateFields); $sql = sprintf("UPDATE %s SET %s", $this->tablename, $updateFields); if(!empty($this->sql['where'])) { $sql .= ' WHERE ' . $this->sql['wheresql']; } return $this->_update($sql); } public function limit($limit, $limitCount = null) { if(!$limitCount) { $this->sql['limit'] = $limit; }else{ $this->sql['limit'] = $limit .','. $limitCount; } return $this; } public function orderBy($orderBy) { $this->sql['orderBy'] = $orderBy; return $this; } public function groupBy($group) { $this->sql['group'] = $group; return $this; } public function where($where) { if(!is_array($where)) { return null; } $crondsArr = []; foreach ($where as $key => $value) { if(!is_array($value)) { $crondsArr[] = "`$key`=:w{$key}"; continue; }else if($value[0] == 'in'){//处理in逻辑 $val = ' ('; foreach($value[1] as $k=>$v){ if($k == 0){ $val .= ':win'.$k; }else{ $val .= ',:win'.$k; } } $val .= ')'; }else{//处理 > < <> 等逻辑 $val = ' :w' . $key; } $crondsArr[] = "`$key` ".$value[0]. $val; } $this->sql['wheresql'] = implode(' AND ', $crondsArr); $this->sql['where'] = $where; return $this; } public function whereOr($where) { if(!is_array($where)) { return null; } $crondsArr = []; foreach ($where as $key => $value) { $fieldValue = $value; if(is_array($fieldValue)) { $crondsArr[] = "`$key` ".$fieldValue[0]. ' :wo' . $key; }else{ $crondsArr[] = "`$key`=:wo{$key}"; } } $sql = implode(' OR ', $crondsArr); if(!empty($this->sql['wheresql'])){ $this->sql['wheresql'] .= ' AND ' . '(' . $sql . ')'; }else{ $this->sql['wheresql'] = '(' . $sql . ')'; } if(!empty($this->sql['whereor'])){ $this->sql['whereor'] = array_merge($this->sql['whereor'], $where); }else{ $this->sql['whereor'] = $where; } return $this; } private function _select($sql){ if($this->type == 'master') { //确认redis缓存数据 if($data = $this->_checkRedisMasterData()){ return $data; } } $stmt = $this->conn[$this->type]->prepare($sql); $stmt = $this->_setWhereParam($stmt); if($this->deBug){ return $stmt->debugDumpParams(); } $ret = $stmt->execute(); if(!$ret) return null; if($this->sql['limit'] == 1){ $retData = $stmt->fetch(\PDO::FETCH_ASSOC); }else{ $retData = $stmt->fetchAll(\PDO::FETCH_ASSOC); } $re_data = $this->_formatTransform($retData); return $this->_wirteRedisMasterData($re_data); } private function _update($sql){ $stmt = $this->conn[$this->type]->prepare($sql); $stmt = $this->_setWhereParam($stmt); //update if(!empty($this->sql['up'])){ foreach($this->sql['up'] as $k=>$v){ $stmt->bindValue('u'.$k,trim($v,'\'')); } } if($this->deBug){ return $stmt->debugDumpParams(); } $ret = $stmt->execute(); return $ret; } private function _insert($sql){ $stmt = $this->conn[$this->type]->prepare($sql); //install if(!empty($this->sql['ins'])){ foreach($this->sql['ins'] as $k=>$v){ $stmt->bindValue('i'.$k,$v); } } $ret = $stmt->execute(); if($ret) { return $this->conn[$this->type]->lastInsertId(); } return false; } private function _setWhereParam($stmt){ //绑定参数 where if(!empty($this->sql['where'])){ foreach($this->sql['where'] as $k=>$v){ if(!is_array($v)){ $val = $v; }else if($v[0] == 'in'){ foreach($v[1] as $key=>$v1){ $stmt->bindValue('win'.$key,$v1); } continue; }else{ $val = $v[1]; } $stmt->bindValue('w'.$k,$val); } } if(!empty($this->sql['whereor'])){ foreach($this->sql['whereor'] as $k=>$v){ if(!is_array($v)){ $val = $v; }else{ $val = $v[1]; } $stmt->bindValue('wo'.$k,$val); } } return $stmt; } public function close() { return $this->conn = null; } //开启事务 public function startTrans($tab = 'item'){ //准备数据库资源 $this->table($tab); if(empty($this->conn['server'])){ exit(); } $this->conn['server']->beginTransaction(); } //提交事务 public function dbCommit(){ if(empty($this->conn['server'])){ exit(); } $this->conn['server']->commit(); } //回滚事务 public function dbRollBack($data = '',$e = ''){ if(empty($this->conn['server'])){ exit(); } $this->conn['server']->rollBack(); if(!empty($data) &&!empty($e)){ _writeLog($data,'update-error--'.date('Y-m-d H:i:s').$e->getMessage(),'error'); } } /** * 原生查询 * @param $querySql * @return mixed */ public function query($table, $querySql) { $this->checkTable($table); $querystr = strtolower(trim(substr($querySql,0,6))); $stmt = $this->conn[$this->type]->prepare($querySql); $ret = $stmt->execute(); $this->sql = []; if(!$ret) var_dump($stmt->errorInfo()); if($querystr == 'select') { $retData = $stmt->fetchAll(\PDO::FETCH_ASSOC); return $this->_formatTransform($retData); }elseif($ret && $querystr == 'insert') { return $this->conn[$this->type]->lastInsertId(); }else{ return $this->_formatTransform($ret); } } private function _formatTransform($data){ if(!is_array($data))return $data; if($this->tablename == 'round_star' || $this->tablename == 'chapter_reward' || $this->tablename == 'dailyround' ){ }elseif($this->tablename == 'userdatas' || $this->tablename == 'userDatas'){ array_walk_recursive($data, function(&$value , $key){ if($key == 'coin'){ $value = (string)$value; }elseif(ctype_digit($value)){ $value = (int)$value; }elseif(is_json($value)){ // jsonチェック $value = json_decode($value, true); } }); }else{ array_walk_recursive($data, function(&$value, $key){ if(ctype_digit($value) && $key != 'name'){ $value = (int)$value; }elseif(is_json($value)){ $value = json_decode($value, true); } }); } return $data; } /** * 二维数组多条更新 * @param $data */ public function updateAll($data){ if(!empty($data['table'])){ $table = $data['table']; $whe = ['id'=>$data['id']]; unset($data['table']); unset($data['id']); $t = $this->table($table)->where($whe)->insert($data); if(!$t)return false; }else{ foreach($data as $k=>$v){ $table = $v['table']; $whe = ['id'=>$v['id']]; unset($v['table']); unset($v['id']); $t = $this->table($table)->where($whe)->update($v); if(!$t)return false; } } return true; } /** * 多条数据插入 * @param $data */ public function insertAll($data){ if(!empty($data['table'])){ $table = $data['table']; unset($data['table']); $t = $this->table($table)->insert($data); if(!$t)return false; }else{ foreach($data as $k=>$v){ $table = $v['table']; unset($v['table']); $t = $this->table($table)->insert($v); if(!$t)return false; } } return true; } /** * @param $table * @param $on * @param string $join * @param string $t1 */ public function join($table, $on, $join = ' left ', $t1 = ' a '){ $this->tablename .= $t1 . $join . $table . $on; } //确认缓存并获取 private function _checkRedisMasterData(){ if(_getRedis()->exists($this->_getMasterRedisName())){ $data = json_decode(_getRedis()->get($this->_getMasterRedisName()),true); return $data; } return false; } //写入缓存,设置有效期 private function _wirteRedisMasterData($data){ if($this->type != 'master') return $data; _getRedis()->set($this->_getMasterRedisName(),json_encode($data)); _getRedis()->expire($this->_getMasterRedisName(),MASTER_EXPIRE); $this->sql = []; return $data; } //获取缓存名 private function _getMasterRedisName(){ $arr = [ 'string', $this->tablename, json_encode($this->sql['where']), $this->sql['limit'], $this->sql['orderBy'], $this->sql['group'], $this->sql['fields'], ]; $str = implode('_',$arr); return $str; }}到此,关于"怎么写redis db pdo类"的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注网站,小编会继续努力为大家带来更多实用的文章!
缓存
学习
事务
数据
信息
多条
数组
更多
逻辑
处理
帮助
实用
有效
接下来
位数
参数
数据库
文章
方法
有效期
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
三级网络技术软件破解版
网络安全的新威胁
网络安全等级保护的内容流程图
校园网络安全竞答活动
湛江通讯软件开发批发价格
研发部门网络安全
cf安全分多少能进绿色服务器
招网络安全的研究所
郭曙光网络安全
深圳王丰软件开发
湖北安卓软件开发费用是多少
注册个体户软件开发
信息化网络技术专业就业
街机游戏服务器
服务器搭建ikev2
百信服务器什么价位
实现下载功能 软件开发
国际计算机网络安全展览会
汕头汽车软件开发外包
数据库创建临时表
火影忍者手游服务器无法连接
银行网络安全责任书范文
东营企业软件开发服务
黄奕警官网络安全
服务器php数据库是怎么工作的
移动光猫服务器端口是多少
创新核心科技构建网络安全
哈利波特忘了自己在哪个服务器
机器学习的项目实践服务器
数据库升级策略专利