單例模式寫MySQL model類,簡單的增、刪、改、查
阿新 • • 發佈:2018-12-14
單例模式的用途,可用於資料庫操作
<?php Class Db { static private $whe;//條件 static private $tab;//表名 static private $lim;//分段變數 static private $order_by;//排序 private $str_key = array();//新增資料的鍵 private $str_val = array();//新增資料的值 private $key_val = array();//修改的資料 //防止外部例項物件 private function__construct(){} //防止克隆 private function __clone(){} //唯一一個例項物件 static public $new_obj; static public function table($t) { if (!self::$new_obj) { self::$new_obj = new Db; } self::$tab=$t; return self::$new_obj; } //連結資料庫 publicfunction mysql_connect() { $mysql_conf = array( 'host'=>'127.0.0.1:3306',//連線地址 'db'=>'test',//庫名 'db_user'=>'root',//賬號 'db_pwd'=>'root'//密碼 ); return new MySQLi($mysql_conf['host'] , $mysql_conf['db_user'], $mysql_conf['db_pwd'] ,$mysql_conf['db']);//建立一個mysqli物件 } //條件 public function where($cond) { if (isset($cond)) { self::$whe = ' where '.$cond; } return $this; } //分頁 public function limit($l) { if (isset($l)) { self::$lim = ' limit '.$l; } return $this; } //排序 public function order($odr) { self::$order_by = ' order by '. $odr; return $this; } //查詢語句 public function sql_select() { //準備一條SQL語句 return "select * from ".self::$tab.self::$order_by.self::$whe; } //查詢多條語句 public function select() { $reslut = mysqli_query($this->mysql_connect(),$this->sql_select().self::$lim);//也可以這麼寫:$this->mysql_connect()->query($this->sql_select().self::$lim); $attr = $reslut->fetch_all(MYSQL_ASSOC);//MYSQL_ASSOC帶資料庫索引 MYSQL_NUM數值維索引 MYSQL_BOTH數值索引、資料庫索引都有 return $attr; } //查詢單條語句 public function find() { $reslut = $this->mysql_connect()->query($this->sql_select()); $attr = $reslut->fetch_row(MYSQL_ASSOC); return $attr; } //新增或修改欄位 public function data(Array $data) { if (!empty($data)) { foreach ($data as $key => $value) { //新增的資料 $this->str_key[] = $key; $this->str_val[] = $value; //修改的資料 $this->key_val[] = is_string($value) ? $key.'= "'.$value.'"' : $key.'='.$value; } return $this; } } //新增欄位 public function insert() { if (!isset($this->str_key) or !isset($this->str_val)) { return 'error'; }else{ $key = implode(',', $this->str_key); $val = implode(',', $this->str_val); $mysql_content = 'insert into '.self::$tab.' ('.$key.') values('.$val.')'; $reslut =$this->mysql_connect()->query($mysql_content); return $reslut; } } //修改欄位 public function update() { if (!$this->key_val) { return 'error'; }else{ $k_v = implode(', ',$this->key_val); $mysql_content = 'update '.self::$tab.' set '.$k_v.' '.self::$whe; $reslut =$this->mysql_connect()->query($mysql_content); return $reslut; } } //刪除欄位 public function delete() { $mysql_content = 'delete from '.self::$tab.self::$whe; $reslut =$this->mysql_connect()->query($mysql_content); return $reslut; } } ?>
下面是呼叫這個類
<?php @include('./model.php'); //單條查詢 $test = Db::table('test')->where('id=3')->find(); var_dump($test); //分頁查詢 // $test1 = Db::table('test')->limit('0,2')->select(); // var_dump($test1); //多條查詢 // $test2 = Db::table('test')->order('id asc')->select(); // var_dump($test2); //新增 // $test3 = Db::table('test')->data(['i'=>3,'age'=>6,'sex'=>9])->insert(); // var_dump($test3); // 修改 // $test4 = Db::table('test')->where('id=30')->data(['IDinfo'=>789,'newid'=>456])->update(); // var_dump($test4); // 刪除 // $test5 = Db::table('test')->where('id>11')->delete(); // var_dump($test5); ?>