一个简单的php数据库连接和文本缓存综合类
2018-07-20 来源:open-open
[PHP]代码
class Db{ protected $_connect; protected $_db = Array(); protected $_cache = Array(); public function __construct($args){ list($this->_db,$this->_cache) = $args; } protected function connect($db){ $this->_connect = mysql_connect($db['hostname'],$db['username'],$db['password']); mysql_set_charset('UTF8'); mysql_select_db($db['databasename'],$this->_connect); } /** *作用:获取表中数据,并将所查询到的数据格式化返回,返回格式是数组形式! *$sql:传入的待执行的SQL语句,必须而且只能是SELECT * */ public function fetch($sql){ $result = ''; if(isset($this->_cache['expire'])){ $name = md5(strtolower(str_replace(' ','',$sql))); $dir = substr($name,0,2); $dir = $this->_cache['dir'].'/'.$dir; !is_dir($dir) && mkdir($dir,0777); !is_dir($dir) && mkdir($dir,0777); $this->_cache['path'] = $dir.'/'.$name; if(is_file($this->_cache['path']) && $this->check_expire()){ $result = $this->get(); } } if($result == ''){ $data = $this->exec($sql); $result = Array(); while($result[] = mysql_fetch_array($data,MYSQL_ASSOC)){} //去除索引 mysql_free_result($data); array_pop($result); isset($this->_cache['expire']) && $this->write($result); } return $result; } /** *作用:执行所有的SQL语句,但不包括SELECT! *$sql:传入的待执行的SQL语句,不能为SELECT *返回值:TRUE OR FALSE */ public function exec($sql){ if($this->_connect === null) $this->connect($this->_db); //进行数据链接 if( $result = mysql_query($sql, $this->_connect) ){ return $result; }else{ die("{$sql}<br />执行错误: " . mysql_error()); } } /** *作用:执行数据库插入语句,只能是INSERT语句! *$v:传入的待执行的条件,是数组格式table代表待执行插入的表,row是字段,value是待插入的值 *返回值:mysql_insert_id() OR FALSE */ public function insert($table,$field,$ignore = 0){ $D = Array('field'=>'','val'=>''); foreach($field AS $key => $v){ $D['field'] .= $key.','; $D['val'] .= "'{$this->escape($v)}',"; } $D['field'] = rtrim($D['field'],','); $D['val'] = rtrim($D['val'],','); $ignore = $ignore > 0 ? 'IGNORE' : ''; $sql = "INSERT {$ignore} INTO {$this->_db['perfix']}{$table}({$D['field']}) VALUES({$D['val']})"; if($this->exec($sql)){ $insert_id = mysql_insert_id(); return is_numeric($insert_id) ? $insert_id : TRUE; }else{ return FALSE; } } public function update($table,$field){ $D = Array('where'=>'','str'=>''); $index = 0; foreach($field AS $key => $v){ $index == 0 ? $D['where'] = "{$key} = '{$this->escape($v)}'" : $D['str'] .= "{$key} = '{$this->escape($v)}',"; $index++; } $D['str'] = rtrim($D['str'],','); $sql = "UPDATE {$this->_db['perfix']}{$table} SET {$D['str']} WHERE {$D['where']}"; return $this->exec($sql); } public function delete($table,$field){ $str = ''; foreach($field AS $key => $v){ $str = "{$key} = '{$v}'"; } $sql = 'DELETE FROM '.$this->_db['perfix'].$table.' WHERE '.$str.' LIMIT 1'; return $this->exec($sql); } public function sum($table,$condition){ $totle = $this->fetch('SELECT COUNT(*) AS totle FROM '.$this->_db['perfix'].$table.' WHERE '.$condition); return $totle[0]['totle']; } /** *作用:对输入特殊字符进行过滤 *$v:待传入检测的参数 *返回值:检测完的参数 */ public function escape($v){ return mysql_real_escape_string($v); } /* *作用:进行缓存判断 */ public function cache($name,$expire=100000000){ $this->_cache['expire'] = $expire; return $this; } public function check_expire(){ return (filemtime($this->_cache['path']) + $this->_cache['expire']) > strtotime("now"); } public function write($data){ $f = fopen($this->_cache['path'], 'w'); if ($f) { flock($f, LOCK_EX); fseek($f, 0); ftruncate($f, 0); $tmp = fwrite($f, serialize($data)); if (!($tmp === false)) { $result = true; } fclose($f); } chmod($this->_cache['path'],0777); } public function get(){ $f = fopen($this->_cache['path'], 'r'); $data = fread($f,filesize($this->_cache['path'])); fclose($f); return unserialize($data); } public function delete_dir($dir = ''){ $dir = empty($dir) ? $this->_cache['dir'] : $dir; !is_dir($dir) && exit; $d = opendir($dir); $i = 0; while(($file = readdir($d)) !== false){ $path = $dir.'/'.$file; if($i > 1) is_file($path) ? unlink($path) : $this->delete_dir($path); $i++; } closedir($d); rmdir($dir); } public function __destruct(){ isset($this->_connect) && mysql_close($this->_connect); } }
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点!
本站所提供的图片等素材,版权归原作者所有,如需使用,请与原作者联系。
上一篇:js 获取某个月份的天数
下一篇:Python生成随机数的方法
最新资讯
热门推荐