php如何实现mysqldb读写分离操作类
创始人
2024-12-09 04:21:59
0次

具体如下:

/**
* php MysqlDB 读写分离类
* -----------------------------------------------------
* $Source: http://code.ilaopo.net/php.class.mysqldb $
* $Author: Bevin Chen $
* $Email: bevin#lifa8.cn $
* $Date: 2009-10-10 $
* -----------------------------------------------------
*/
class mysqldb {
  var $querynum = 0;
  var $linkr,$linkw,$charset,$pconnect,$dbconfig;
  function __constructor($dbarray) {
    $this->mysqldb($dbarray);
  }
  function mysqldb($dbarray,$dbcharset='utf8',$pcontent=0) {
    if(!is_array($dbarray[0])) {
      echo "数据库参数错误";
      return false;
    }
    $this->charset = $dbcharset;
    $this->pconnect = $pconnect;
    $this->dbconfig['master'] = $dbarray[0];
    $dbServerNum = count($dbarray);
    if($dbServerNum > 1) {
      /*
  * 当x=1 时,$dbarray[0]不作slave
  * 当x=0 时,$dbarray[0]作slave
  */
      $x = 1;
      $rand = rand($x,$dbServerNum-1);
      $this->dbconfig['slave'] = $dbarray[$rand];
    } else {
      $this->dbconfig['slave'] = false;
    }
  }
  function connect($dbhost,$dbuser,$dbpw,$dbname) {
    if($this->pconnect) {
      $link = @mysql_pconnect($dbhost, $dbuser, $dbpw);
    } else {
      $link = @mysql_connect($dbhost, $dbuser, $dbpw, 1);
    }
    if($link) {
      if($this->version($link) > '4.1') {
        if($this->charset) {
          @mysql_query("SET character_set_connection=".$this->charset.", character_set_results=".$this->charset.", character_set_client=binary", $link);
        }
        if($this->version($link) > '5.0.1') {
          @mysql_query("SET sql_mode=''", $link);
        }
      }
      if($dbname) {
        @mysql_select_db($dbname, $link);
      }
      //print_r($link);
      return $link;
    } else {
      return false;
    }
  }
  function connectM() {
    if(!$this->linkw = $this->connect($this->dbconfig['master'][0],$this->dbconfig['master'][1],$this->dbconfig['master'][2],$this->dbconfig['master'][3])) {
      exit("主数据库连接失败!");
    }
    //echo "
##connectM!.
";   }   function connectS() {     if($this->dbconfig['slave']) {       if(!$this->linkr = $this->connect($this->dbconfig['slave'][0],$this->dbconfig['slave'][1],$this->dbconfig['slave'][2],$this->dbconfig['slave'][3])) {         $this->dbconfig['slave'] = false;         $this->connectS();       }       //echo "
##connectS!.
";     } else {       if(!$this->linkw) {         $this->connectM();       }       $this->linkr = $this->linkw;     }   }   // db read   function query($sql, $type = '') {     if(!$this->linkr) {       $this->connectS();     }     $func = $type == 'UNBUFFERED' && @function_exists('mysql_unbuffered_query') ?       'mysql_unbuffered_query' : 'mysql_query';     $query = $func($sql, $this->linkr);     $this->querynum++;     return $query;   }   function fetch_array($query, $result_type = MYSQL_ASSOC) {     return @mysql_fetch_array($query, $result_type);   }   function fetch_row($query) {     $query = mysql_fetch_row($query);     return $query;   }   function fetch_One($sql) {     $query = $this->query($sql);     return $this->fetch_row($query);   }   /* 获取分页方法 */   function fetch_page($sql, $pagenum) {     $page = intval($_GET['page']);     $query = $this->query($sql);     $countnum = $this->num_rows($query);     $countpage = ceil($countnum/$pagenum);     if($page<1) {       $page=1;     }     if($page>$countpage) {       $page=$countpage;     }     $limitstart = ($page-1)*$pagenum;     /* 获取数据结果集 */     for ($i=0; $i<($limitstart+$pagenum); $i++) {       if($i>=$countnum) {         break;       }       if($i>=$limitstart) {         $result[] = $this->fetch_array($query);       } else {         $this->fetch_array($query);       }     }     /* 生成url */     $url = $_SERVER['QUERY_STRING'];     $url = preg_replace("/&?page=[0-9]+/i","",$url);     $array['countnum'] = $countnum;     $array['countpage'] = $countpage;     $array['result'] = $result;     $array['page'] = $page;     if($page>1) {       $array['preurl'] = "?".$url."&page=".($page-1);       $array['prepage'] = $page-1;     } else {       $array['preurl'] = "?".$url."&page=1";       $array['prepage'] = 1;     }     if($page<$countpage) {       $array['nexturl'] = "?".$url."&page=".($page+1);       $array['nextpage'] = $page+1;     } else {       $array['nexturl'] = "?".$url."&page=".$countpage;       $array['nextpage'] = $countpage;     }     $array['firsturl'] = "?".$url."&page=1";     $array['firstpage'] = 1;     $array['lasturl'] = "?".$url."&page=".$countpage;     $array['lastpage'] = $countpage;     $array['nopage'] = "?".$url."&page=";     return $array;   }   // db write   function queryw($sql, $type = '') {     if(!$this->linkw) {       $this->connectM();     }     $func = $type == 'UNBUFFERED' && @function_exists('mysql_unbuffered_query') ?       'mysql_unbuffered_query' : 'mysql_query';     $query = $func($sql, $this->linkw);     $this->querynum++;     return $query;   }   function update($table,$where,$array) {     $whereset = $set = $dot = '';     foreach($array as $key=>$value) {       $set .= $dot." `$key`='$value'";       $dot = ',';     }     $whereset = $dot = '';     foreach($where as $k=>$v) {       $whereset .= $dot." `$k`='$v'";       $dot = ' and ';     }     $sql = "update $table set $set where $whereset";     return $this->queryw($sql);   }   function insert($table,$array) {     $col = $v = $dot = '';     foreach($array as $key=>$value) {       $v .= $dot."'$value'";       $col .= $dot."`$key`";       $dot = ',';     }     $sql = "insert into $table ($col) values ($v)";     if($this->queryw($sql)) {       return $this->insert_id();     } else {       return false;     }   }   function insert_id() {     return ($id = mysql_insert_id($this->linkw)) >= 0 ? $id : $this->result($this->queryw("SELECT last_insert_id()"), 0);   }   // db other   function affected_rows($link) {     return mysql_affected_rows($link);   }   function error($link) {     return (($link) ? mysql_error($link) : mysql_error());   }   function errno($link) {     return intval(($link) ? mysql_errno($link) : mysql_errno());   }   function result($query, $row) {     $query = @mysql_result($query, $row);     return $query;   }   function num_rows($query) {     $query = mysql_num_rows($query);     return $query;   }   function num_fields($query) {     return mysql_num_fields($query);   }   function free_result($query) {     return mysql_free_result($query);   }   function fetch_fields($query) {     return mysql_fetch_field($query);   }   function version($link) {     return mysql_get_server_info($link);   }   function close($link) {     return mysql_close($link);   } } /* 测试例子 // * $dbarray[] = array('localhost','bevin','password','test'); * $dbarray[] = array('ilaopo.net','root','password','test'); * $dbarray[] = array('192.168.1.77','cxh','password','test'); * $newdb = new mysqldb($dbarray,'utf8'); * $array = array('name' => date("Y-m-d H:i:s")); * $id = $newdb->insert("test",$array); * $result = $newdb->fetch_page("select * from test order by id desc",'10'); * print_r($result); * $id = $newdb->insert("test",$array); * echo $id; */

相关内容

热门资讯

空调连续工作多久需要停机休息 空调连续工作的时间取决于多个因素,包括空调的型号、功率、使用环境和维护情况等。一般来说,空调可以连续...
空调哪个符号是除湿的 空调除湿功能通常用一个水滴形状的符号表示。不同品牌和型号的空调遥控器可能会有所差异,但一般来说,除湿...
格力空调多长时间加一次氟利昂 1、一般情况下,空调对氟利昂的使用量是非常小的,所以在空调使用了四年左右的时候再考虑加也没问题。2、...
空调用多长时间需要加氟一次 一般情况下是五年。当出现以下这几种情况时,空调才需要加氟。1、空调的室内机和室外机各有两个接口,当接...
格调生活·C标思享荟:卡萨帝在... 9月12日的郑州龙湖金融岛,夜风轻拂,灯光璀璨。“C标时刻共传奇——卡萨帝思享荟暨20周年品牌盛典郑...
品牌价值破千亿、高端份额持续领... 9月12日,“C标时刻共传奇——卡萨帝思享荟暨20周年品牌盛典郑州站”在郑州龙湖金融岛举办。2026...
空调主板坏了修800还是换新的 空调主板坏了是修还是换新,需要考虑多个因素,以下是一些建议:1. 维修成本:如果维修费用较低,比如 ...
空调开多久需要休息多长时间 问题:空调开多久需要休息多长时间回答:1、在使用空调的过程中,一般空调开7~8个小时左右需要休息2~...
中央空调多长时间清洗一次 1、一般空调开机前清洗一次即可,空调开机中间时段再清洗一次,空调关机时清洗一次,这样比较合理。2、空...
中央空调氟利昂多久加一次 看空调制热和制冷程度,很多人的观点认为氟利昂必须一年放一次,其实这个观点是错误的,理解上面有点偏差,...