-
-
/** - * MySQL 読み書き分離クラス
- * $db_config = array(
- * 'master' => array('host'=>'localhost:3306','user'=>'admin','passwd' = >'123456','db'=>'stat'),
- * 'スレーブ' => array('host'=>'localhost:3307','user'=> ' admin','passwd'=>'123456','db'=>'stat'),
- * array('host'=>'localhost:3308','user'=>'admin' , 'passwd'=>'123456','db'=>'stat')
- * )
- * );
- *
- * 注: 複数のスレーブがある場合は、そのうちの 1 つをランダムに接続します
- * 最終編集: bbs .it-home.org
- */
- /*
- $db_config = array(
- 'master' => array('host'=>'localhost: 3306','user'=>'admin','passwd'=>'123456','db'=>'stat'),
- 'slave' => array(
- array('host'= >'localhost:3307','user'=>'admin','passwd'=>'123456','db'=>'stat'),
- array('host'=>'localhost】 :3308','user'=>'admin','passwd'=>'123456','db'=>'stat')
- )
- );
$ db = MySQL::getInstance('','r-w');
$sql = "select * from admin";
$rs = $db->query($sql);
- while ($row = $db->fetch($rs)){
- echo "uid:".$row['uid']." ".$row[ 'userName']."
";
- }
echo " ";
- */
class MySQL
- {
- private static $_instance = null;//データベース库接続例
- private static $_master = null;// 主データベース库接続例
- private static $_slave = null;// 重データベース库接続例
-
- public $_config = array();//データ库接続構成情報
- public $_res = null;//查询实例句
- public $_flag = '';//标识当前语句是主还是重データ台库上行
- public $_link = null;
-
- /**
- * 単一インスタンス
- * ここに説明を入力します ...
- * @paramknown_type $dbname
- * @paramknown_type $mode
- */
- public static function & getInstance($dbname='',$mode='rw'){
- if (is_null(self::$_instance)){
- self::$_instance = 新しい self();
- self::$_instance->__getConf();
- self::$_instance->connect($dbname,$mode);
- }
-
- return self::$_instance;
- }
/**
- * データベース構成情報を取得します
- * ここに説明を入力します...
- */
- public function __getConf(){
- global $db_config;
- $this->_config['master'] = $db_config['master'];
- $this->_config['スレーブ'] = $db_config['slave'];
- }
-
- /**
- * データベース接続
- * ここに説明を入力します...
- * @param $dbname は、デフォルトでは、設定ファイルのライブラリが接続されます
- * @param $mode rw は、メイン ライブラリに接続することを意味します。 、r-w は読み取りと書き込みの分離を意味します
- */
- public function connect($dbname='',$mode = 'rw'){
- if($mode == 'rw'){
- if(is_null(self::$_master)){
- $this->_master = $this->_slave = $this->conn_master($dbname);
- }
- }else{
- if(is_null(self::$_master)){
- $this->_master = $this->conn_master($dbname);
- }
- if(is_null(self::$_slave)){
- $this ->_slave = $this->conn_slave($dbname);
- }
- }
- }
-
- /**
- * メインデータベースサーバーに接続します
- * ここに説明を入力してください...
- */
- public function conn_master($dbname=''){
- $_link = mysql_connect( $this->_config['master']['host'],$this->_config['master']['user'],$this->_config['master']['passwd'] ,true) または die ("Connect ".$this->_config['master']['host']." 失敗します。");
- mysql_select_db(empty($dbname)?$this->_config[' master']['db']:$dbname,$_link) または die(" DB 名 ".$this->_config['master']['db']." は存在しません。");
- mysql_query("set names utf8",$_link);
- return $_link;
- }
-
- /**
- * スレーブデータベースサーバーに接続します
- * ここに説明を入力してください...
- */
- public function conn_slave($dbname=''){
- $offset = rand(0,count($this->_config['slave'])-1);
- $ _link = @mysql_connect($this->_config['slave'][$offset]['host'],$this->_config['slave'][$offset]['user'],$this- >_config['slave'][$offset]['passwd'],true) または die(" Connect ".$this->_config['slave'][$offset]['host']." 失敗します.");
- mysql_select_db(empty($dbname)?$this->_config['slave'][$offset]['db']:$dbname,$_link) または die(" DB 名 ".$ this->_config['slave'][$offset]['db']." は存在しません。");
- mysql_query("set names utf8",$_link);
- return $_link;
- }< /p>
/**
- * データベースクエリを実行します
- * ここに説明を入力します...
- * @param string $sql
- */
- パブリック関数クエリ($sql,$master=true){
if($master == true || (substr(strto lower($sql),0,6) != 'select') && $master == false){
- $this->_res = mysql_query($sql,$ this->_master);
- if(!$this->_res){
- $this->_error[] = mysql_error($this->_master);
- }
- $this->_flag = ' master';
- $this->gt;_link = $this->gt;_master;
- } else {
- $this->gt;_res = mysql_query($sql,$this->_slave);
- if(!$this- >_res){
- $this->_error[] = mysql_error($this->_slave);
- }
- $this->_flag = 'スレーブ';
- $this->_link = $this- >_slave;
- }
return $this->_res;
- }
-
- /**
- * 単一行のレコードを取得します
- * ここに説明を入力します ...
- * @parammixed $rs
- */
- public function get($rs=''){
- if(empty($rs)){
- $rs = $this-> ;_res;
- }
- return mysql_fetch_row($rs);
- }
-
- /**
- * 複数行のレコードを取得します
- * ここに説明を入力します...
- * @parammixed $rs
- * @param $result_type
- */
- public function fetch($rs = ''){
- if(empty($rs)){
- $rs = $this->_res;
- }
- return mysql_fetch_array($rs,MYSQL_ASSOC);
- }
-
- /**
- * データを挿入します
- * ここに説明を入力します ...
- * @paramknown_type $sql
- */
- public function add($sql){
- $rs = $this-> query($sql);
- if($rs)
- return mysql_insert_id($this->_link);
- return false;
- }
-
- /**
- * データを更新します
- * ここに説明を入力します...
- * @paramknown_type $sql
- */
- public function update($sql){
- if(empty($sql)) return false;
- $rs = $this->query($sql);
- if($rs)
- return $this->fetchNum();
- return false;
- }< ;/p>
/** - * 前のステートメントの影響を受ける行数を取得します
- * ここに説明を入力します...
- */
- public function fetchNum(){
- return mysql_affected_rows($this->_link);
- }
-
- /**
- * デストラクター、データベース接続リソースを解放します
- * ここに説明を入力します...
- */
- public function __destruct(){
- mysql_close($ this->_link);
- }
- }
-
复制代
|