WEB开发网
开发学院WEB开发PHP PHP 的 database 访问 阅读

PHP 的 database 访问

 2012-05-24 09:12:07 来源:WEB开发网   
核心提示:<?php/** * dao abstrract * @author einar_he@76rens.com */abstract class Gospel_Dao_Abstract implements Gospel_Dao_Interface{/** * 表名称 * * @var string */prot
<?php
/**
 * dao abstrract
 * @author einar_he@76rens.com
 */
abstract class Gospel_Dao_Abstract implements Gospel_Dao_Interface{
	/**
	 * 表名称
	 * 
	 * @var string
	 */
	protected $_table = '';
	
	/**
	 * 数据库名
	 * 
	 * @var string
	 */
	protected $_database = '';
	
	/**
	 * construct
	 */
	public function __construct(){
		$this->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

Tags:PHP database 访问

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接