欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  后端开发

PHP 的 database 访问

程序员文章站 2022-05-12 17:45:38
...
init();
	}
	
	/**
	 * 初始化操作
	 */
	abstract protected function init();
	
	/**
	 * 获取db源
	 * 
	 * @param string $rule
	 * @return Gospel_Db_Adapter
	 */
	public function getAdapter($rule='master'){
		return Gospel_Db_Adapter::getInstance($rule);
	}
	
	/**
	 * 获取db名称
	 * 
	 * @param string $rule
	 * @return string
	 */
	public function getDatabase($rule=''){
		return $this->_database;
	}
	
	/**
	 * 活去表名称
	 * 
	 * @param string $rule
	 * @return string
	 */
	public function getTable($rule=''){
		return $this->_table;
	}
	
	/* 获取多条记录
	 * @see Gospel/Dao/Gospel_Dao_Interface#getItems($rule, $where, $sort, $offset, $limit, $pager, $flag)
	 */
	public function getItems($rule, $where, $sort='', $offset, $limit, $pager=0, $flag='slave'){
		$return = array();
		if($where){
			$query = 'SELECT * FROM ';
			$query .= $this->getTable($rule);
			$query .= ' WHERE '.$this->getWhere($where);
			if($sort){
				$query .= ' ORDER BY '.$sort;
			}
			$page = $page>0?$page:1;
			$psize = $psize>0?$psize:10;
			$offset = ($page-1)*$psize;
			$query .= ' LIMIT '.$offset.','.$psize;
			$data = $this->getAdapter($flag)->queryAll($query);
			if($pagination){
				$return['data'] = array();
				if($data){
					$rtotal = $this->getWhereTotal($rule, $where);
					$return['data'] = $data;
					$return['pager'] = array(
					'page'=>$page,
					'psize'=>$psize,
					'rtotal'=>$rtotal,
					'ptotal'=>ceil($rtotal/$psize)
					);
				}else{
					$return['pager'] = array(
					'page'=>$page,
					'psize'=>$psize,
					'rtotal'=>0,
					'ptotal'=>0
					);
				}
			}else{
				$return = $data;
			}
		}
		return $return;
	}
	
	/* 获取单条记录
	 * @see Gospel/Dao/Gospel_Dao_Interface#getItem($rule, $where, $sort, $flag)
	 */
	public function getItem($rule, $where, $sort='', $flag='slave'){
		$return  = array();
		if($where){
			$query = 'SELECT * FROM ';
			$query .= $this->getTable($rule);
			$query .= ' WHERE '.$this->getWhere($where);
			if($sort != ''){
				$query .= ' ORDER BY '.$sort;
			}
			$query .= ' LIMIT 0,1';
			$return = $this->getAdapter($flag)->queryRow($query);
		}
		return $return;
	}
	
	/* 获取表字段信息
	 * @see Gospel/Dao/Gospel_Dao_Interface#getTableFields($rule, $flag)
	 */
	public function getTableFields($rule, $flag='master'){
		return $this->getAdapter($flag)->getTableFields($this->getTable($rule));
	}
	
	/* 更新记录
	 * @see Gospel/Dao/Gospel_Dao_Interface#update($rule, $where, $set)
	 */
	public function update($rule, $where, array $set){
		$return = 0;
		if($where && $set){
			$query = 'UPDATE `'.$this->getTable($rule);
			$query .= '` SET '.$this->getSet($set);
			$query .= ' WHERE '.$this->getWhere($where);
			if($query){
				$return  = $this->getAdapter('master')->queryUpdate($query);
			}
		}
		return $return;
	}
	
	/* 统计记录数
	 * @see Gospel/Dao/Gospel_Dao_Interface#getWhereTotal($rule, $where, $flag)
	 */
	public function getWhereTotal($rule, $where, $flag='slave'){
		$return = 0;
		if($where){
			$sql = 'SELECT COUNT(*) FROM '.$this->getTable($rule);
			$sql .= ' WHERE '.$this->getWhere($where);
			$return = $this->getAdapter()->queryTotal($sql);
		}
		return $return;
	}
	
	/* 添加记录
	 * @see Gospel/Dao/Gospel_Dao_Interface#add($rule, $row)
	 */
	public function add($rule, array $row){
		$return = 0;
		if($row){
			$keys = '';
			$values = '';
			foreach($row as $key=>$value){
				$keys .= '`'.$key.'`,';
				if(substr($key, 0, 1) == 'n'){
					$values .= $value.',';
				}else{
					$values .= "'".$value."',";
				}
			}
			$keys = substr($keys, 0, -1);
			$values = substr($values, 0, -1);
			$query = 'INSERT INTO `';
			$query .= $this->getTable($rule);
			$query .= '`('.$keys.') VALUES(';
			$query .= $values.')';
			$return = $this->getAdapter('master')->queryUpdate($query);
		}
		return $return;
	}
	
	/* 删除记录
	 * @see Gospel/Dao/Gospel_Dao_Interface#del($rule, $where, $lines)
	 */
	public function del($rule, $where, $lines=1){
		$return = 0;
		if($where){
			$query = 'DELETE FROM `';
			$query .= $this->getTable($rule);
			$query .= '` WHERE '.$this->getWhere($where);
			$query .= ' LIMIT '.$lines;
			$return = $this->getAdapter('master')->queryUpdate($query);
		}
		return $return;
	}
	
	/**
	 * 格式化where语句
	 * 
	 * @param string|array $where
	 * @return string
	 */
	private function getWhere($where){
		$return = '';
		if(is_array($where)){
			$return .= implode(' AND ', $where);
		}else{
			$return .= $where;
		}
		return $return;
	}
	
	/**
	 * 格式化成更新语句格式
	 * 
	 * @param array $set
	 * @return String
	 */
	private function getSet(array $set){
		$return = '';
		if($set){
			foreach ($set as $key=>$val){
				if (substr($key, 0, 1) != 'n'){
					$return .= '`'.$key."`='".$val."',";
				}else{
					$mk = substr($val, 0, 1);
					if(is_numeric($mk)){
						$return .= '`'.$key."`=".$val.",";
					}else{
						$v = intval(substr($val, 1));
						if($mk == '+'){
							$return .= '`'.$key.'`=`'.$key.'`+'.$v.',';
						}elseif($mk == '-'){
							$return .= '`'.$key.'`=`'.$key.'`-'.$v.',';
						}
					}
				}
			}
			$return = substr($return, 0, -1);
		}
		return $return;
	}
}
//end