PHP之Model類封裝
阿新 • • 發佈:2018-12-21
<?php //引入配置檔案 include "./config.php"; class Model { protected $link;//儲存連線物件 protected $tableName = "";//儲存表名 protected $field = "*";//儲存要查詢欄位 protected $allFields = [];//儲存當前表所有欄位 protected $where = "";//儲存where條件 protected $order = "";//儲存order排序條件 protected $limit = "";//儲存limit條件 /** * 構造方法(初始化) * @param string $tableName 要操作的表名 */ public function __construct($tableName){ //連線資料庫的初始化方法 $this->getConnect(); //儲存將要操作的資料庫表名 $this->tableName = PRE.$tableName; //獲取當前表有哪些欄位 $this->getFields(); } /** * 連線資料庫方法 */ public function getConnect(){ //1.連線資料庫 $this->link = mysqli_connect(HOST,USER,PWD,DB,PORT); //2.判斷連線 if (mysqli_connect_errno($this->link)>0) { echo mysqli_connect_error($this->link); exit; } //3.設定字符集 mysqli_set_charset($this->link,CHARSET); } /** * 執行傳送方法(查詢) * @param array $sql 查詢出來的陣列 * @return array 返回二維陣列 */ public function query($sql) { $result = mysqli_query($this->link,$sql); //處理結果集 if ($result && mysqli_num_rows($result)>0) { $array = []; while ($row = mysqli_fetch_assoc($result)) { $array[] = $row; } } return $array; } /** * 執行傳送方法(增刪改) * @param array $sql 查詢出來的陣列 * @return 新增成功返回上個id,刪改成功返回true,反之返回false */ public function exec($sql) { $result = mysqli_query($this->link,$sql); //處理結果集 if ($result && mysqli_affected_rows($this->link)>0) { //判斷是否為新增,是則返回上次操作的id if (mysqli_insert_id($this->link)) { return mysqli_insert_id($this->link); } //不是新增,則返回true return true; }else{ //沒有執行結果 return false; } } /** * 設定要查詢的欄位資訊 * @param string $field 要查詢的欄位 * @return object 返回自己,保證連貫操作 */ public function field($field){ // //判斷輸入欄位是否存在 // if(empty($field)){ // return $this; // } $this->field = $field; return $this; } /** * 獲取當前表有哪些欄位 * */ protected function getFields(){ //查詢當前表結構 $sql = "desc {$this->tableName}"; //執行併發送sql語句 $result = $this->query($sql); $fields = []; foreach($result as $v){ //var_dump($v); $fields[] = $v['Field']; } // var_dump($fields); $this->allFields = $fields; } /** * 查詢多條資料 * @return array 返回查詢出來的二維陣列 */ public function select(){ $sql = "select {$this->field} from {$this->tableName} {$this->where} {$this->order} {$this->limit}"; echo $sql; //執行併發送SQL $result = $this->query($sql); // var_dump($result); //判斷是否執行成功 if ($result) { //返回一條資料 return $result; } return []; } /** * 查詢一條資料 * @param int $id 要查詢的id * @return array 返回查詢出來的一維陣列 */ public function find($id=""){ //判斷id是否為空 if (!empty($id)) { $where = " where id={$id}"; }else{ $where = $this->where; } $sql = "select {$this->field} from {$this->tableName} {$where} limit 1"; echo $sql; // exit; //執行併發送sql語句 $result = $this->query($sql); // var_dump($result); //判斷是否執行成功 if ($result) { //返回一條資料 return $result[0]; } return []; } /** * 統計總條數 * @return int 返回查到的條數 */ public function count(){ $sql = "select count(*) as total from {$this->tableName} limit 1"; //執行併發送SQL $result = $this->query($sql); //判斷是否執行成功 if ($result) { //返回一條資料 return $result[0]['total']; } return 0; } /** * 新增資料 * @param array $data 要新增的陣列 */ public function add($data){ //判斷是否是陣列 if (!is_array($data)) { return $this; } //判斷是否全是非法欄位 if (empty($data)) { die("非法資料"); } //過濾非法欄位 foreach($data as $k => $v){ if (!in_array($k,$this->allFields)) { unset($data[$k]); } } //取得陣列所有的鍵 $keys = array_keys($data); //將陣列轉換為字串 $key = implode(",",$keys); // $values = array_values($data); $value = implode("','",$data); $sql = "insert into {$this->tableName}({$key}) values('{$value}')"; echo $sql; // exit; return $this->exec($sql); } /** * 根據id刪除資料 * @param int $id 要刪除的id * @return int 返回受影響行數 */ public function delete($id=""){ //判斷id是否為空 if (isset($id)) { $where = "where id={$id}"; }else{ $where = $this->where; } $sql = "delete from {$this->tableName} {$where}"; echo $sql; // exit; return $this->exec($sql); } /** * 修改資料 * @param array $data 要改的資料 * @return int 返回受影響的行數 */ public function update($data){ //判斷是否是陣列 if (!is_array($data)) { return $this; } //判斷是否全為非法欄位 if (empty($data)) { die("非法資料"); } $str = ""; //過濾非法欄位 foreach ($data as $k => $v) { if ($k == "id") { $this->where = "where id={$v}"; } if (!in_array($k,$this->allFields)) { unset($data[$k]); }else{ $str .= "{$k}='{$v}',"; } } //判斷是否有條件 if (empty($this->where)) { die("請修改輸入條件"); } //去除右邊逗號 $str = rtrim($str,","); $sql = "update {$this->tableName} set $str {$this->where}"; echo $sql; // exit; return $this->exec($sql); } /** * 設定where條件 * @param string $str where條件 * @return object 返回自己,連貫操作 */ public function where($str) { $this->where = 'where '.$str; return $this; } /** * 處理order排序條件 * @param string $order order條件 * @return object 返回自己,連貫操作 */ public function order($order){ $this->order = 'order by '.$str; return $this; } /** * 處理limit條件 * @param string $limit limit條件 * @return object 返回自己,連貫操作 */ public function limit($limit){ //跳過幾條取幾條 $this->limit = "limit ".$limit; return $this; } } //自行除錯 $a = new Model("info"); // var_dump($a->find(3)); // var_dump($a->select()); //var_dump($a->count()); // $res = $a->select(); //var_dump($res); ?>