PHP 的 database 访问

php中文网
发布: 2016-05-19 12:15:21
原创
1694人浏览过
<?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
登录后复制
PHP速学教程(入门到精通)
PHP速学教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号