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
更多精彩
赞助商链接