批改状态:未批改
老师批语:
<?php/*** 数据库工具类,采用pdo方式* 当前仅支持MySql*/class Db{public function __construct(){// 数据库连接池$this->pdo_list = [];}// 初始化pdoprivate function init($db){if(isset($this->pdo_list[$db]) && $this->pdo_list[$db]){$this->pdo = $this->pdo_list[$db];return;}// 数据库配置$dsn = "mysql:host=127.0.0.1;dbname=imqq";$this->pdo = new \PDO($dsn,'root','root');$this->pdo->setAttribute(\PDO::ATTR_ERRMODE, \PDO::ERRMODE_EXCEPTION);$this->pdo_list[$db] = $this->pdo;}// 指定表名,支持多数据库public function table($table,$db='default'){$this->init($db);$this->table = $table;$this->field = '*';$this->order = '';$this->limit = 0;$this->where = [];$this->lastsql = '';$this->binds = [];return $this;}// 指定查询字段public function field($field='*'){$this->field = $field;return $this;}// 指定where条件public function where($where){$this->where = $where;return $this;}// 限制结果数量public function limit($limit){$this->limit = $limit;return $this;}// 排序public function order($order=''){$this->order = $order;return $this;}// 查询一条记录public function item(){$sql = $this->build_sql('select').' limit 1';$stmt = $this->pdo->prepare($sql);$this->bindValue($stmt);$stmt->execute();$item = $stmt->fetchAll(\PDO::FETCH_ASSOC);return $item ? $item[0] : false;}// 查询列表public function lists(){$sql = $this->build_sql('select');$stmt = $this->pdo->prepare($sql);$this->bindValue($stmt);$stmt->execute();return $stmt->fetchAll(\PDO::FETCH_ASSOC);}// 自定义索引列表public function cates($index){$result = [];$lists = $this->lists();if(!$lists){return $result;}foreach ($lists as $key => $value) {$result[$value[$index]] = $value;}return $result;}// 查询总数public function count(){$sql = $this->build_sql('count');$stmt = $this->pdo->prepare($sql);$this->bindValue($stmt);$stmt->execute();$total = $stmt->fetchColumn(0);return $total;}// 分页public function pages($page = 1,$pageSize = 10,$path=''){$this->limit = ($page-1)*$pageSize.','.$pageSize;$total = $this->count();$data = $this->lists();$pages = $this->_subPages($page,$pageSize,$total,$path);$result = array('total'=>$total,'data'=>$data,'page'=>$page,'pages'=>$pages);return $result;}// 添加记录public function insert($data){$sql = $this->build_sql('insert',$data);$this->sqls[] = $sql;$stmt = $this->pdo->prepare($sql);$this->bindValue($stmt,$data);$stmt->execute();return $this->pdo->lastInsertId();}// 修改记录public function update($data){$sql = $this->build_sql('update',$data);$stmt = $this->pdo->prepare($sql);$this->bindValue($stmt,$data);return $stmt->execute();}// 删除记录public function delete(){$sql = $this->build_sql('delete');$stmt = $this->pdo->prepare($sql);$this->bindValue($stmt);return $stmt->execute();}// 构造sqlprivate function build_sql($type,$data = null){$sql = '';// queryif($type == 'select'){$where = $this->_build_where();$sql = "SELECT {$this->field} FROM {$this->table}" . ($where ? " WHERE {$where}" : '');$this->order && $sql .= " order by {$this->order}";$this->limit && $sql .= " limit {$this->limit}";}// countif($type == 'count'){$where = $this->_build_where();$field = count(explode(',',$this->field))>1?'*':$this->field;$sql = "SELECT count({$field}) FROM {$this->table}" . ($where ? " WHERE {$where}" : '');}// insertif($type == 'insert'){$sql = $this->_build_insert($data);}// updateif($type == 'update'){$sql = $this->_build_update($data);}// deleteif($type == 'delete'){$sql = $this->_build_delete();}$this->lastsql = $sql;return $sql;}// 构造查询条件whereprivate function _build_where(){$where = '';if(is_array($this->where)){foreach ($this->where as $key => $item) {$where .= " and `{$key}`=:{$key}";}}else{$where = $this->where;}$where = ltrim($where,' and');return $where;}// 构造添加数据sqlprivate function _build_insert($data){if(!$data){return false;}$sql = "insert into {$this->table}";$fields = $values = [];foreach ($data as $key => $val) {$fields[] = '`'.$key.'`';$values[] = ":$key";}$sql .= ('('.implode(',',$fields).')values('.implode(',',$values).')');return $sql;}// 构造更新数据sqlprivate function _build_update($data){$where = $this->_build_where();$str_update = '';foreach ($data as $key => $val) {$str_update .= ('`'.$key.'`=:'.$key.',');}$sql = "UPDATE {$this->table} SET {$str_update}";$sql = rtrim($sql,',');$sql .= ' WHERE '.$where;return $sql;}// 构造删除数据sqlprivate function _build_delete(){$where = $this->_build_where();$sql = "DELETE FROM {$this->table}" . ($where ? " WHERE {$where}" : '');return $sql;}// 参数绑定private function bindValue($stmt,$data = null){if($this->where && is_array($this->where)){foreach($this->where as $key => $item){$stmt->bindValue(':'.$key,$item);$this->binds[$key] = $item;}}if($data){foreach ($data as $k => $value) {$stmt->bindValue(':'.$k,$value);$this->binds[$k] = $value;}}}// 获取最后执行的sqlpublic function getlastsql(){if(!$this->lastsql){return '';}foreach ($this->binds as $key => $value) {$value = is_string($value) ? "'".$value."'" : $value;$this->lastsql = str_replace(':'.$key, $value, $this->lastsql);}echo $this->lastsql.'<br>';}// 构造分页(bootstrap风格)// cur_page:当前第几页private function _subPages($cur_page,$pageSize,$total=0,$path=''){$html = '';// 分页数$page_count = ceil($total / $pageSize);if($page_count == 1){return $html;}// path$symbol = '?';$is_and = strpos($path,'?');if($is_and !== false && $is_and >= 0){$symbol = '&';}// 添加“首页”if($cur_page>1){$pre_page = $cur_page-1;$html = "<li><a href='{$path}{$symbol}page=1'><span>首页</span></a></li>";$html .= "<li><a href='{$path}{$symbol}page={$pre_page}'><span>下一页</span></a></li>";}// 每次最多显示几页$max_page_limit = 6;// 当前页向前显示几页$cur_page_pre = (int)$max_page_limit/2;// 第一页$start = $cur_page > ($page_count - $max_page_limit) ? ($page_count - $max_page_limit) : $cur_page;// 最后一页$end = ($cur_page + $max_page_limit) >$page_count ? $page_count : ($cur_page + $max_page_limit);if($start - $cur_page_pre > 0){$start = $start - $cur_page_pre;$end = $end -$cur_page_pre;}if($cur_page+$cur_page_pre>=$end && $page_count>$max_page_limit){$start = $start + $cur_page_pre;$end = $end +$cur_page_pre;}$start = $start <= 0 ? 1 : $start;for($i=$start;$i<$end;$i++){$html .= $cur_page == $i ? "<li class='active'><a>{$i}</a></li>":"<li><a href='{$path}{$symbol}page={$i}'>{$i}</a></li>";}// 添加尾页if($cur_page<$page_count){$after_page = $cur_page+1;$html .= "<li><a href='{$path}{$symbol}page={$after_page}'>下一页</a></li>";$html = $html . "<li><a href='{$path}{$symbol}page={$page_count}'>尾页</a></li>";}$html = '<ul class="pagination">'.$html.'</ul>';return $html;}}
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号