1. 程式人生 > >單例模式 封裝PHP的mysql類

單例模式 封裝PHP的mysql類

<?php
    /*
     *describe:單例模式 資料庫類
    單例模式的必要條件
    (1)私有的構造方法-為了防止在類外使用new關鍵字例項化物件
    (2)私有的成員屬性-為了防止在類外引入這個存放物件的屬性
    (3)私有的克隆方法-為了防止在類外通過clone成生另一個物件
    (4)公有的靜態方法-為了讓使用者進行例項化物件的操作
    */
    header("content-type:text/html;charset=utf-8");
    final class DB{
        private $charset = "utf8"
; //字串編碼 private $link = NULL; //資料庫連線 private static $instance = NULL; //儲存物件 //初始化 private function __construct($hostfield,$userfield,$password,$datebase){ $this->link = mysqli_connect($hostfield,$userfield,$password,$datebase); if
(!$this->link){ die("連線失敗: " . mysqli_connect_error()); } mysqli_query($this->link,"SET fieldS ".$this->charset); return $this->link; } //防止克隆 private function __clone(){} //靜態公共介面 public static function
getInstance($hostfield,$userfield,$password,$datebase){
if(!self::$instance instanceof self){ self::$instance = new DB($hostfield,$userfield,$password,$datebase); } return self::$instance; } /* *describe:查詢單個欄位 *@param $field type:string 傳入需要篩選的欄位 *@param $table_name type:string 需要查詢的表名 *@param $where type:array 需要篩選的where條件 */ public function getField($field="",$table_name="",$where=""){ $where_string = ""; //where條件 $where_string = $this->getWhere($where); if(is_string($field)){ //組裝sql $sql = "SELECT {$field} FROM {$table_name} WHERE {$where_string}"; $result = mysqli_query($this->link,$sql); while($res = mysqli_fetch_array($result,MYSQL_ASSOC)){ $info[] = $res; } //若只有一個數組,則返回一維陣列 if(count($info)==1){ return $info[0]; }else{ return $info; } } } /* *describe:查詢單條語句 *@param $sql 查詢語句 *@param $type 返回陣列的型別 * MYSQL_ASSOC - 關聯陣列(預設) * MYSQL_NUM - 數字陣列 * MYSQL_BOTH -同時產生關聯和數字陣列 */ public function getRow($sql,$type=MYSQL_ASSOC){ $result = mysqli_query($this->link,$sql); $res = mysqli_fetch_array($result,$type); return $res; } /* *describe:查詢多條語句 *@param $sql 查詢語句 *@param $type 返回陣列的型別 * MYSQL_ASSOC - 關聯陣列(預設) * MYSQL_NUM - 數字陣列 * MYSQL_BOTH -同時產生關聯和數字陣列 */ public function getRows($sql,$type=MYSQL_ASSOC){ $result = mysqli_query($this->link,$sql); while($rows = mysqli_fetch_array($result,$type)){ $res[] = $rows; } return $res; } /* *describe:增加語句 *@param type:array or string $info 傳入的值 若為陣列則進行拼接SQL語句,並新增 返回新增的ID 若傳入的為SQL語句則直接執行,返回新增的ID *@param $table_name 為需要新增的表名(可選) */ public function add($info,$table_name = ""){ //判斷是否為陣列,進行SQL拼接 if(is_array($info)){ $field = ""; $val =""; $fields = ""; $vals =""; foreach($info as $k=>$v){ $field .= "`".$k."`,"; $val .= "'".$v."',"; } //$fields = substr($field,0,strlen($field)-1); //$vals = substr($val,0,strlen($val)-1); $fields = trim($field,","); $vals = trim($val,","); $sql = "INSERT INTO {$table_name} ({$fields}) VALUES ({$vals})"; if(mysqli_query($this->link,$sql)){ return mysqli_insert_id($this->link); }else{ echo "error:".$sql."<br/>".mysqli_error($this->link); } //判斷是否為SQL語句 }else if(is_string($info)){ if(mysqli_query($this->link,$info)){ return mysqli_insert_id($this->link); }else{ echo "error:".$info."<br/>".mysqli_error($this->link); } }else{ echo "error"; } } /* *describe:更新 *@param type:array $info 傳入的修改的陣列 *@param type:string $table_name 需修改的表名 *@param type:array $where 修改的where條件,傳入陣列 */ public function update($info,$table_name = "",$where=""){ //判斷是否是陣列,進行SQL拼接 if(is_array($info)){ $field = ""; $fields = ""; //拼接修改語句 foreach($info as $k=>$v){ $field .= "`{$k}`='{$v}',"; } $fields = trim($field,","); //拼接where條件 $where_string = ""; $where_string = $this->getWhere($where); //拼接SQL $sql = "UPDATE {$table_name} SET {$fields} where {$where_string}"; echo $sql; die(); if(mysqli_query($this->link,$sql)){ return mysqli_affected_rows($this->link); }else{ echo "error:".$sql."<br/>".mysqli_error($this->link); } }else{ echo "error"; } } /* *describe:刪除 *@param $where type:array 傳入需要刪除的where條件 為陣列 *@param $table_name type:string 需要刪除的表名 */ public function del($where,$table_name=""){ if(is_array($where)){ $where_string =""; //拼接where條件 $where_string = $this->getWhere($where); $sql = "DELETE FROM {$table_name} WHERE {$where_string}"; if(mysqli_query($this->link,$sql)){ return mysqli_affected_rows($this->link); }else{ echo "error:".$sql."<br/>".mysqli_error($this->link); } }else{ echo "error"; } } /* *describe:執行原生sql *@param $sql type:string 需要執行的sql */ public function query($sql){ if(mysqli_query($this->link,$sql)){ return mysqli_affected_rows($this->link); }else{ echo "error:".$sql."<br/>".mysqli_error($this->link); } } /* *describe:拼接where條件 *@param $where type:array 傳入where為陣列的條件 */ private function getWhere($where){ $where_string = ""; if(is_array($where)){ foreach($where as $k=>$v){ if(is_array($v)){ foreach($v as $kk=>$vv){ $where_string .= "`{$k}` {$kk} '{$vv}' AND "; } }else{ $where_string .= "`{$k}`='{$v}' AND "; } } } return rtrim($where_string,"AND "); } } //測試 mysql類 $class = DB::getInstance("localhost","root","123456","test"); $data = array( "city_name"=>"test12222222", "pid"=>"111111", ); $where = array( "id"=>"438", "city_name"=>array("like"=>"%test%"), ); //var_dump($class->query("DELETE FROM city WHERE `city_name` LIKE '%test%'")); //var_dump($class->add($data,"city")); //var_dump($class->del($where,"city")); //var_dump($class->update($data,"city",$where)); //var_dump($class->getField("city_name,pid","city",$where));