一个简单的php数据库连接和文本缓存综合类

2018-07-20    来源:open-open

容器云强势上线!快速搭建集群,上万Linux镜像随意使用

[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);
	}	
}

标签: Mysql 代码 数据库

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点!
本站所提供的图片等素材,版权归原作者所有,如需使用,请与原作者联系。

上一篇:js 获取某个月份的天数

下一篇:Python生成随机数的方法