1] 或者 '`id`=1' 尽量不要使用string 因为没有做防sql注入 * 多条件查询 * ['id'=>['<',100]] */ public function where($where){ $this->param = []; $this->filter = ''; if($where){ $this->filter .= ' WHERE '; if(is_string($where)){ $this->filter .= ' '.$where; } else { $flag = true; foreach ($where as $key => $value){ if($flag){ $flag = false; if(is_array($value)){ $this->filter .= ' `'.$key.'` '.$value[0].' :'.$key; $this->param[$key] = $value[1]; } else { $this->filter .= ' `'.$key.'` = :'.$key; $this->param[$key] = $value; } } else { if(is_array($value)){ $this->filter .= ' AND `'.$key.'` '.$value[0].' :'.$key; $this->param[$key] = $value[1]; } else { $this->filter .= ' AND `'.$key.'` = :'.$key; $this->param[$key] = $value; } } } } } return $this; } /** * 拼装排序条件 * @param array $order 排序条件 * @return $this * $order='id desc' */ public function order($order = 'id desc'){ if($order){ $this->filter .= ' ORDER BY '.$order.' '; } return $this; } /** * group by * @param array $order * @return $this * $group=['sex','name'] */ public function group($group = []){ if($order){ $this->filter .= ' GROUP BY '; $this->filter .= ' '.implode(' ,',$group).' '; } return $this; } /** * 查询limit * @param string * @return $this * $limit = '100' 限制查询100条 * $limit = '2,100' 查询第二页 100条数据 */ public function limit($limit = '100'){ $this->filter .= ' LIMIT '.$limit.' '; return $this; } /** * 查询字段 * @param string $field * @return $this * $field = 'id,count(1),sub(num)' */ public function field($field = '*'){ $this->field = $field; return $this; } /** * 查询所有 * @return mixed */ public function fetchAll(){ $sql = sprintf('SELECT %s FROM `%s` %s',$this->field,$this->table,$this->filter); $this->filter = ''; $sth = Db::pdo()->prepare($sql); $sth = $this->formatParam($sth,$this->param); $sth->execute(); return $sth->fetchAll(); } /** * 查询一条 * @return mixed */ public function fetch(){ $sql = sprintf('SELECT %s FROM `%s` %s',$this->field,$this->table,$this->filter); $this->filter = ''; $sth = Db::pdo()->prepare($sql); $sth = $this->formatParam($sth,$this->param); $sth->execute(); return $sth->fetch(); } /** * 根据条件(id)删除 * @param $id * @return mixed */ public function delete(){ $sql = sprintf('DELETE FROM `%s` %s',$this->table,$this->filter); $this->filter = ''; $sth = Db::pdo()->prepare($sql); $sth = $this->formatParam($sth,$this->param); $sth->execute(); return $sth->rowCount(); } /** * 新增数据 * @param $data * @return mixed */ public function add($data){ $sql = sprintf('INSERT INTO `%s` %s',$this->table,$this->formatInsert($data)); $sth = Db::pdo()->prepare($sql); $sth = $this->formatParam($sth,$data); $sth->execute(); return $sth->rowCount(); } /** * 新增多条数据 * @param $data * @return int */ public function addAll($data){ $sql = sprintf('INSERT INTO `%s` %s',$this->table,$this->formatInsertAll($data)); $sth = Db::pdo()->prepare($sql); $sth->execute(); return $sth->rowCount(); } /** * 修改数据 * @param $data * @return mixed */ public function update($data){ $sql = sprintf('UPDATE `%s` SET %s %s',$this->table,$this->formatUpdate($data),$this->filter); $this->filter = ''; $sth = Db::pdo()->prepare($sql); $sth = $this->formatParam($sth,$data); $sth = $this->formatParam($sth,$this->param); $sth->execute(); return $sth->rowCount(); } /** * 绑定具体变量值 * @param PDOStatement $sth * @param array $params * @return PDOStatement */ public function formatParam(PDOStatement $sth,$params = []){ foreach ($params as $param=>&$value){ $param = is_int($param)?$param+1:':'.ltrim($param,':'); $sth->bindParam($param,$value); } return $sth; } /** * 将数组转化为插入格式的sql语句 * @param $data * @return string */ private function formatInsert($data){ $fields = []; $names = []; foreach ($data as $key=>$value) { $fields[] = sprintf('`%s`',$key); $names[] = sprintf(':%s',$key); } $field = implode(',',$fields); $name = implode(',',$names); return sprintf('(%s) VALUES(%s)',$field,$name); } /** * 格式化插入数据 * @param $data * @return string */ private function formatInsertAll($data){ $fields = []; $values =''; foreach ($data[0] as $key=>$value) { $fields[] = sprintf('`%s`',$key); } foreach ($data as $k=>$v){ $values .= '(\''.implode('\',\'',$v).'\'),'; } $field = implode(',',$fields); $values = rtrim($values,','); return sprintf('(%s) VALUES %s',$field,$values); } /** * 更新数据的格式转换 * @param $data * @return string */ private function formatUpdate($data){ $fields = []; foreach ($data as $key=>$value){ $fields[] = sprintf('`%s`=:%s',$key,$key); $this->param[$key] = $value; } return implode(',',$fields); } }