標籤:
2015年3月31日 18:27:34
情景: 一次請求, 可能要連結多個不同的資料庫, 比如說主從, 為了避免重複connect資料庫, 可以將已經連結的資料庫物件儲存下來
下一次調用的時候, 直接取出來使用就行了
實現:
1 class mysqldb 2 { 3 //多主機執行個體 4 private static $instance = array(); 5 //串連 6 public $link = null; 7 8 public $_database = ‘‘;//當前資料庫名 9 public $_tablename = ‘‘;//當前表的表名10 public $_dt =‘‘;//database.tablename11 12 13 //如果主機沒變,並且已經存在MYSQL串連,就不再建立新的串連14 //如果主機改變,就再產生一個執行個體建立一個串連15 public static function getInstance($host, $username, $password, $database, $tablename)16 {17 if (empty(self::$instance[$host])) {18 $rc = new ReflectionClass(‘mysqldb‘);19 self::$instance[$host] = $rc->newInstanceArgs(array($host, $username, $password, $database, $tablename));20 }21 22 return self::$instance[$host];23 }24 25 public function __construct($host, $username, $password, $database, $tablename)26 {27 $this->link = new mysqli($host, $username, $password);28 if($this->link->connect_error) {29 echo $this->link->connect_error,‘<br>‘;30 exit;31 }32 $this->_database = $database;//database name33 $this->_tablename = $tablename;//table name34 $this->_dt = "`{$this->_database}`.`{$this->_tablename}`";35 36 $this->link->query("set names utf8");37 }38 }
注意: 使用反射功能實現, 建構函式為public
使用方法:
1 public function testmysqls()2 {3 $obj1 = $this->getlink(‘tiezi‘);4 $obj2 = $this->getlink(‘name‘);5 6 $arr1 = $obj1->select(‘‘, ‘‘, ‘‘, 1);7 $arr2 = $obj2->select(‘‘, ‘‘, ‘‘, 1);8 var_dump($arr1, $arr2);9 }
ZPF MYSQL資料庫層多執行個體實現