single單例模式

單例模式:多用於數據庫鏈接,保證數據庫只鏈接一次,避免重複鏈接。由於屢次打開服務器會形成服務器負擔,運行速度會減慢。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     }
相關文章
相關標籤/搜索