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.tablename 11 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 name 33 $this->_tablename = $tablename;//table name 34 $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 }
原文:http://www.cnblogs.com/iLoveMyD/p/4381709.html