数据库类分页类
今天漲姿勢了,學習了數據庫和分頁的類的封裝,感覺很好用,向大家推薦一下
數據庫類(把數據庫封裝起來,更好的對數據操作)
<?php //數據庫操作類 class Model {private $link = null;//連接標識private $tabName = null;//用于存儲表名private $fields = array();//字段列表private $pk;//主鍵的名字private $keys;//要查詢的字段private $where;//查詢條件private $order;//排序條件private $limit;//分頁條件//初始化數據庫連接public function __construct($tabName){$this->link = mysqli_connect(HOST,USER,PWD,DB);mysqli_set_charset($this->link,CHAR);$this->tabName = $tabName;//接收實例化時,傳遞的表名$this->getField();//獲取當前數據表內所有的字段}//查詢所有數據public function select(){$keys = '*';//默認查詢全部if (!empty($this->keys)) {$keys = $this->keys;$this->keys = null;//每次清除查詢條件}$where = '';if (!empty($this->where)) {$where = 'WHERE '.$this->where;$this->where = null;//每次清除查詢條件}$order = '';if (!empty($this->order)) {$order = 'ORDER BY '.$this->order;$this->order = null;//每次清除查詢條件}$limit = '';if (!empty($this->limit)) {$limit = 'LIMIT '.$this->limit;$this->limit = null;//每次清除查詢條件}echo $sql = "SELECT {$keys} FROM {$this->tabName} {$where} {$order} {$limit}";return $this->query($sql);}//查詢單條數據 public function find($findValue, $findKey = 'id'){$keys = '*';//默認查詢全部if (!empty($this->keys)) {$keys = $this->keys;$this->keys = null;//每次清除查詢條件}$sql = "SELECT {$keys} FROM {$this->tabName} WHERE {$findKey}='{$findValue}' LIMIT 1";$data = $this->query($sql);//判斷結果是否為空if (empty($data)) {return false;}return $data[0];}//獲取排序條件public function order($order){$this->order = $order;return $this;//返回自己}//獲取排序條件public function limit($limit){$this->limit = $limit;return $this;//返回自己}//獲取要查詢的條件public function where($where){$this->where = $where;return $this;//返回自己}//指定查詢條件public function field($arr){//判斷傳遞的參數是否是數組if (!is_array($arr)) return $this;//過濾非法參數foreach ($arr as $key => $val) {if (!in_array($val,$this->fields)) {unset($arr[$key]);}}//如果處理好的參數為空,直接返回自己if (empty($arr)) return $this;//生成SQL條件,存為屬性.$this->keys = implode(',',$arr);//返回自己,用于對象鏈操作return $this;}//刪除public function del($delValue, $delKey = 'id'){$sql = "DELETE FROM {$this->tabName} WHERE {$delKey}='{$delValue}'";return $this->execute($sql);}//增加public function add($data = array()){//直接給參數POST不合適//判斷$data 是否為空,賦值為POSTif (empty($data)) {$data = $_POST;}//篩選POST數據foreach ($data as $k => $v) {//如果POST里的$k 在字段列表之中 就保留if (in_array($k, $this->fields)) {$list[$k] = $v;}}//生成SQL中的 key 和value$keys = implode(',',array_keys($list));$values = implode("','",array_values($list));$sql = "INSERT INTO {$this->tabName} ({$keys}) VALUES ('{$values}')";//執行添加操作, 返回 自增ID 或者 falsereturn $this->execute($sql);}//修改public function update($data = array()){//直接給參數POST不合適//判斷$data 是否為空,賦值為POSTif (empty($data)) {$data = $_POST;}//篩選POST里面的數據foreach ($data as $k => $v) {//如果POST里的$k 在字段列表中if (in_array($k, $this->fields) && $k != $this->pk) {$list[] = "`{$k}`='{$v}'";}}//生成SET條件$set = implode(',',$list);$sql = "UPDATE {$this->tabName} SET {$set} WHERE `{$this->pk}`='{$data[$this->pk]}'";return $this->execute($sql);}//統計條數數量public function count(){$where = '';if (!empty($this->where)) {$where = 'WHERE '.$this->where;$this->where = null;//每次清除查詢條件}$sql = "SELECT COUNT(*) totel FROM {$this->tabName} {$where}";$totel = $this->query($sql);// var_dump($totel);return $totel[0]['totel'];}/*************************輔助方法*****************************///查詢private function query($sql){//執行SQL語句$result = mysqli_query($this->link, $sql);//判斷查詢結果if ($result && mysqli_num_rows($result) > 0 ) {$list = array();$list = mysqli_fetch_all($result,MYSQLI_ASSOC);mysqli_free_result($result);return $list;//返回查詢結果的二維數組} else {return false;//查詢失敗,返回false}}//增刪改 刪改時返回true/false 增時:自增IDprivate function execute($sql){//執行SQL語句$result = mysqli_query($this->link, $sql);//處理結果集if ($result && mysqli_affected_rows($this->link) > 0 ) {//添加時 回返回自增IDif (mysqli_insert_id($this->link) > 0 ) {//添加時 返回自增IDreturn mysqli_insert_id($this->link);} else {//刪改時 的操作完成return true;}} else {//操作失敗return false;}}//獲取數據表內的所有字段 和主鍵private function getField(){//查詢表結構$sql = "DESC {$this->tabName}";$list = $this->query($sql);// var_dump($list);$fields = array();foreach ($list as $key => $val) {$fields[] = $val['Field'];//獲取主鍵 if ($val['Key'] == 'PRI') {$this->pk = $val['Field'];}}// var_dump($fields);//給屬性賦值$this->fields = $fields;}//銷毀資源public function __destruct(){mysqli_close($this->link);} }分頁類(使得對數據庫的記錄更好的進行分頁處理)
<?php class Page {protected $total;//總條數.protected $num;//每頁顯示數.protected $allPage;//總頁數protected $url;//總頁數protected $page;//總頁數public function __construct($total, $num = 10){$this->total = $total;//得到總條數$this->num = $num;//得到每頁顯示數$this->getAllPage();//得到總頁數$this->getUrl();//獲取當前頁的URL路徑$this->getPage();//獲取頁碼}//計算總頁數protected function getAllPage(){$this->allPage = ceil($this->total / $this->num);}//獲取當前頁的URL路徑protected function getUrl(){$this->url = $_SERVER['PHP_SELF'];}//獲取頁碼protected function getPage(){//GET里獲取參數$page = empty($_GET['p'])?1:$_GET['p'];//范圍判斷$page = max($page ,1);$page = min($this->allPage , $page);//給屬性賦值$this->page = $page;}//生成分頁的HTML代碼public function show(){//獲取搜索條件$params = "";foreach ($_GET as $k => $v) {//將頁碼條件排除掉if ($k == 'p') continue;//拼接搜索條件$params .= "&{$k}={$v}";}/*共X條 當前x/y頁 首頁/上/下/尾 */$html = "共{$this->total}條 ";$html .= "當前{$this->page} / {$this->allPage}頁 ";$html .= "<a href='{$this->url}?p=1{$params}'>首頁</a> ";$html .= "<a href='{$this->url}?p=".($this->page - 1)."{$params}'>上一頁</a> ";$html .= "<a href='{$this->url}?p=".($this->page + 1)."{$params}'>下一頁</a> ";$html .= "<a href='{$this->url}?p={$this->allPage}{$params}'>尾頁</a>";return $html;}//返回limit條件public function limit(){// (當前頁 - 1) * 每頁顯示數$limit = ($this->page - 1) * $this->num.','.$this->num;//x,yreturn $limit;} }
總結
- 上一篇: ueditor1_4_3-utf8-js
- 下一篇: JEECG_3.7 权限开发视频正式发