單例模式:多用於數據庫鏈接,保證數據庫只鏈接一次,避免重複鏈接。由於屢次打開服務器會形成服務器負擔,運行速度會減慢。php
如下是一個鏈接數據庫的單例模式:mysql
1 <?php 2 class db_mysql{// 單例中包含三個私有屬性(一個靜態變量,一個構造函數,一個克隆方法),一個公共靜態方法。三私一公 3 private static $instance;// 用來存儲數據庫鏈接 4 private $pdo; 5 private function __construct(){// 私有構造函數,定義成private型,防止外部實例化對象 6 //echo 11; 7 $this->con("my_blog","root","123456");//鏈接數據庫 8 } 9 private function __clone(){ 10 //定義成私有的是防止對象被克隆,克隆是能夠改變參數。若是$db4=$db;這是賦值操做,不能改變參數 11 echo 22; 12 } 13 private function con($dbname,$username,$password){//數據庫鏈接,三種方式:mysql_connet mysqli pdo 14 try { 15 $this->pdo=new PDO("mysql:host=localhost;dbname=$dbname",$username,$password);// 建立pdo鏈接對象 16 echo "鏈接成功"; 17 } catch (PDOException $ex) { 18 echo $ex->getMessage(); 19 } 20 } 21 public static function getinstance(){ 22 if(!(self::$instance instanceof self)){// self表明自身(自己是一個對象),判斷$instance的值屬不屬於這個對象, 23 self::$instance=new self;// self表明 db_mysql 24 } 25 return self::$instance; 26 } 27 public function insert($data){// 添加功能 28 if(!is_array($data)){ 29 return FALSE; 30 } 31 $fields= array_keys($data); 32 $val=array_values($data); 33 // var_dump($val);//數組 34 $str=array_walk($val,array($this,'parsestr'));// 經過循環方式,循環數組中的每個值 35 //foreach($val as $k=>$v){$val[$k]=parsestr($v)}; 36 //array_walk 至關於一個while循環,array($this,'')是一個數組,parsestr是一個回調函數 37 // echo "<pre>"; 38 // var_dump($val);//數組 39 $str=implode(",", $val); 40 // echo "<br>"; 41 // echo "<pre>"; 42 // echo $str; 43 $fields= implode(",", $fields); 44 $sql="insert into fruit ($fields) values ($str) "; 45 echo $sql; 46 echo "<br>"; 47 $num=$this->pdo->exec($sql); 48 echo $num; 49 echo "<br>"; 50 $id= $this->pdo->lastInsertId(); 51 echo $id; 52 } 53 public function getlist($fileds,$table,$condition){//$fileds 字段 $table表名 $condition 查詢條件 54 if(!is_array($condition)){ 55 return FALSE; 56 } 57 $where="1=1"; 58 foreach ($condition as $key => $val){ 59 $where .=" and $key ='".$val."'"; 60 } 61 $sql="select ".$fileds." from ".$table." where ".$where; 62 $result=$this->pdo->query($sql); 63 if($result){//判斷$result,是否有值 64 return $result->fetchall(PDO::FETCH_ASSOC); 65 } 66 } 67 68 public function parsestr(&$val){//引用 69 $val= "'".$val."'";// $val[$k]= 70 // echo "<pre>"; 71 // echo $val;//字符串 72 } 73 74 } 75 //$b=new db_mysql(); 76 $db= db_mysql::getinstance(); 77 echo "<br>"; 78 //$db2= db_mysql::getinstance(); 79 echo "<br>"; 80 //$db3= clone $db;//克隆 81 $db->insert(['fruit_name'=>'葡萄','supplier_id'=>2]); 82 echo "<br>"; 83 $a=$db->getlist("*",'fruit',array('fruit_name'=>'蘋果')); 84 echo "<br>"; 85 echo "<pre>"; 86 var_dump($a);
鏈接數據庫的方法中用:try{sql
}catch(){數據庫
}數組
捕獲異常服務器
1 13 private function con($dbname,$username,$password){//數據庫鏈接,三種方式:mysql_connet mysqli pdo 2 14 try { 3 15 $this->pdo=new PDO("mysql:host=localhost;dbname=$dbname",$username,$password);// 建立pdo鏈接對象 4 16 echo "鏈接成功"; 5 17 } catch (PDOException $ex) { 6 18 echo $ex->getMessage(); 7 19 } 8 20 }