您的位置:首页 > 数据库 > MySQL

支持多主机的单一实例MYSQL类

2014-04-27 12:35 399 查看
2014年4月27日 12:34:08

概述:

一次请求(或执行一次PHP交互),如果只连接了一个主机上的MYSQL数据库那么该MYSQL类就只生成一个对应的实例;

如果一次请求需要连接了不同机器上的MYSQL数据库,那么该MYSQL类就会生成多个实例,其中每一个实例对应一台机器;

这些实例用静态数组变量$instance保存;

并用静态数组变量$_host记录每台机器上的MYSQL在此次请求中被连接了多少次(也可以创建其他变量,用来记录每个表执行insert,update,delete多少次等等)

<?php
class mysqldb
{
//多主机的单一实例
private static $instance = array();
//连接
public $link = null;

private static $_host = array();//已经连接的主机名
protected $_database = '';//当前数据库名
protected $_tablename = '';//当前表的表名
protected $_primarykey = '';//当前表的主键
protected $_dt ='';//database.tablename

//如果主机没变,并且已经存在MYSQL连接,就不再创建新的连接
//如果主机改变,就再生成一个实例创建一个连接
public static function getInstance($host, $username, $password, $database, $table, $primarykey)
{
$is_host_exist = array_key_exists($host, mysqldb::$_host);
if (!$is_host_exist) {
mysqldb::$instance[$host] = new mysqldb($host, $username, $password, $database, $table, $primarykey);
}
mysqldb::$_host[$host] = empty(mysqldb::$_host[$host]) ? 1 : mysqldb::$_host[$host] + 1;

return mysqldb::$instance[$host];
}

private function __construct($host, $username, $password, $database, $table, $primarykey)
{
$this->link = new mysqli($host, $username, $password);
if($this->link->connect_error) {
echo $this->link->connect_error,'<br>';
exit;
}
$this->_database = $database;//database name
$this->_tablename = $table;//table name
$this->_primarykey = $primarykey;//primary key
$this->_dt = "`{$this->_database}`.`{$this->_tablename}`";

$this->link->query("set names utf8");
}

public static function getLinkedHost()
{
return mysqldb::$_host;
}
}


广告: 我的站点,www.zhangzhibin.com,这个站点就是用我写的框架实现的,上边的数据库类就是摘取自我的框架(随后会补全介绍它的用法)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐