- <?php
- /**
- * Mysql数据库处理
- * @version 1.0
- */
- class MysqlPdo extends Object implements MysqlFace
- {
- private $configFile = null; //配置文件
- private $pdo = null ; //pdo对象接口
- private $tableKey = null ; //当前操作表
- public function __construct( $tableKey )
- {
- $this->tableKey = $tableKey;
- }
- /**
- * 获取库文件信息
- *
- */
- public function getConfig()
- {
- if( ! isset($this->tableKey) )
- {
- throw new QException('当前操作表不存在');
- }
- $dbconfig = $this->DbConfig();
- require($dbconfig);
- $this->configFile = $tbl[$this->tableKey];
- if( !isset( $this->configFile ))
- {
- throw new QException('当前操作表配置不存在'.$this->tableKey);
- }
- }
- /**
- * 数据库链接
- *
- */
- public function init()
- {
- $this->getConfig();
- if( ! file_exists($this->configFile['configFile']) )
- {
- throw new QException('当前链接配置不存在'.$this->configFile['configFile']);
- }
- require $this->configFile['configFile'];
- try {
- $this->pdo = new PDO(
- $dsn,
- $user,
- $password,
- array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES ".$encode,PDO::FETCH_ASSOC=>true));
- //$this->pdo->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_WARNING); //php预处理错误
- } catch (Exception $e) {
- exit('数据库连接失败,错误信息:'. $e->getMessage());
- }
- }
- /**
- * 表组合
- *
- */
- private function tablePrefix()
- {
- $this->getConfig();
- return $this->configFile['tablePrefix'].$this->tableKey;
- }
- /**
- * sql执行
- *
- * @param string $sql
- */
- private function query( $sql )
- {
- $this->init();
- return $this->pdo->query($sql);
- }
- /**
- * 反回执行受影响行数
- *
- * 适合于 插入 、修改
- * @param string $sql
- */
- private function exec( $sql )
- {
- $this->init();
- return $this->pdo->exec($sql);
- }
- /**
- * 获取一条数据
- *
- * @access public
- * @param string $tableKey 数据表标识
- * @param array $rule 数据查询规则
- * @return array
- */
- public function findOne( $param )
- {
- $param = $this->combined( $param );
- $where = !empty($param['where']) ? ' WHERE '.$param['where'] : ' '.$param['limit'] ;
- $sql = 'SELECT '.$param['col'].' FROM `'.$this->tablePrefix().'`'.$where.' LIMIT 1';
- return $this->query($sql)->fetch();
- }
- /**
- * 获取多条数据
- *
- * @access public
- * @param string $tableKey 数据表标识
- * @param array $rule 数据查询规则
- * @return array
- */
- public function find( $param )
- {
- $param = $this->combined( $param );
- $where = !empty($param['in']) ? ' WHERE '.$param['in'] : ' '.$param['limit'] ;
- $sql = 'SELECT '.$param['col'].' FROM `'.$this->tablePrefix().'`'.$where;
- return $this->query($sql)->fetchAll();
- }
- /**
- * 获取多条数据(数据分页时用)
- *
- * @access public
- * @param string $tableKey 数据表标识
- * @param array $rule 数据查询规则
- * @return array
- */
- public function findAll($param)
- {
- }
- /**
- * 统计数据
- *
- * @access public
- * @param string $tableKey 数据表标识
- * @param array $rule 数据查询规则
- * @return int
- */
- public function count($param)
- {
- $param = $this->combined( $param );
- $sql = 'SELECT COUNT('.$param['count'].') AS total FROM `'.$this->tablePrefix().'` WHERE '.$param['where'];
- return $this->query($sql)->fetch();
- }
- /**
- * 创建一条数据
- *
- * @access public
- * @param array $param 数据创建规则
- * @return int 0失败、大于0成功
- */
- public function create($param)
- {
- $sql = 'INSERT INTO `'.$this->tablePrefix().'` '.$this->deal($param).';';
- return $this->exec($sql) ? $this->pdo->lastInsertId() : false;
- }
- /**
- * 修改数据
- *
- * @access public
- * @param string $tableKey 数据表标识
- * @param array $data 数据信息[键值对]
- * @param array $rule 数据修改规则
- * @return bool
- */
- public function modify($param)
- {
- $param = $this->combined( $param );
- $sql = 'UPDATE `'.$this->tablePrefix().'` SET '.$param['set'].' WHERE '.$param['where'].';';
- return $this->exec($sql) ? $this->pdo->lastInsertId() : false;
- }
- /**
- * 删除数据
- *
- * @access public
- * @param array $param 数据删除规则
- * @return bool
- */
- public function remove($param)
- {
- $param = $this->combined( $param );
- $where = !empty($param['in']) ? $param['in'] : $param['where'] ;
- $sql = 'DELETE FROM `'.$this->tablePrefix().'` WHERE '.$where;
- return $this->exec($sql) ? $this->pdo->lastInsertId() : false;
- }
- /**
- * 处理(查询)数组数据
- *
- * @param array $param
- */
- private function combined( $param )
- {
- $r = array(
- 'col' => null,
- 'set' => null,
- 'where' => null,
- 'in' => null,
- 'group' => null,
- 'order' => null,
- 'limit' => null,
- 'count' => null,
- 'pageRows' => null,
- 'point' => null,
- );
- //处理查询字段
- if(isset($param['col']) && !empty($param['col'])) {
- $r['col'] = $param['col'];
- }
- //处理修改字段
- if(isset($param['set']) && !empty($param['set'])) {
- $r['set'] .= $this->where( $param['set'] );
- }
- //处理where条件字段
- if(isset($param['where']) && !empty($param['where'])) {
- $r['where'] .= $this->where( $param['where'] );
- }
- //处理in条件字段(尽量少用)
- if(isset($param['in']) && !empty($param['in'])) {
- $str = $keys = null;
- foreach ($param['in'] as $key=>$val) {
- $keys .= $key;
- }
- if(empty($keys)) {return false;}
- foreach ($param['in'][$keys] as $val) {
- $str .= $val.",";
- }
- $r['in'] = $keys.' in ('.trim($str ,',').')';
- }
- //处理group条件字段
- if(isset($param['group']) && !empty($param['group'])) {
- $r['group'] .= 'GROUP BY '.$param['group'];
- }
- //处理order条件字段
- if(isset($param['order']) && !empty($param['order'])) {
- $desc = isset($param['desc']) && !empty($param['desc']) ? $param['desc'] : 'ASC';
- $r['order'] .= 'ORDER BY '.$param['order'].' '.$desc;
- }
- //处理limit条件字段
- if(isset($param['limit']) && !empty($param['limit'])) {
- $limit = isset($param['limit']) && !empty($param['limit']) ? $param['limit'] : 1;
- $r['limit'] .= 'LIMIT '.$limit;
- }
- //处理limit条件字段
- if(isset($param['count']) && !empty($param['count'])) {
- $limit = isset($param['count']) && !empty($param['count']) ? $param['count'] : '*';
- $r['count'] .= $limit;
- }
- //处理分页显示条件
- if(isset($param['pageRows']) && !empty($param['pageRows'])) {
- $r['pageRows'] .= $param['pageRows'];
- }
- //分页数
- if(isset($param['point']) && !empty($param['point'])) {
- $r['point'] .= $param['point'];
- }
- //同时判断
- if(isset($param['symbol']) && !empty($param['symbol'])) {
- $str = $param['symbol'];
- $bol = !empty($str['than']) ? $str['link'].' '.$str['than'] : '';
- $r['symbol'] .= $str['larger'].' '.$bol;
- }
- return $r;
- }
- /**
- * 处理(where)组合语句
- *
- * @param array $param
- */
- private function where ( $param )
- {
- $str = null;
- foreach ($param as $key =>$val) {
- if(is_int($val)) {
- $str .= "`{$key}` = {$val} ";
- } else {
- $str .= "`{$key}` = '{$val}' ";
- }
- }
- return $str;
- }
- /**
- * 处理(插入)数组数据
- *
- */
- private function deal( $param )
- {
- $keys = $value = $vals = null;
- foreach( $param as $key => $val ) {
- $keys .= "`".$key."`,";
- $vals .= "'".$val."',";
- }
- $keys = trim($keys , ',');
- $vals = trim($vals , ',');
- $value = "({$keys}) VALUE ({$vals})";
- return $value;
- }
- /**
- * 析构函数
- */
- public function __destruct()
- {
- unset($this->pdo);
- unset($this->configFile);
- unset($this->tableKey);
- }
- //该片段来自于http://www.codesnippet.cn/detail/0406201512762.html
来源: http://www.codesnippet.cn/detail/0406201512762.html