全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

php实现的mysqldb读写分离操作类示例

本文实例讲述了php实现的mysqldb读写分离操作类。分享给大家供大家参考,具体如下:

/**
* 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 "<br>##connectM!.<br>";
  }
  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 "<br>##connectS!.<br>";
    } 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;
*/

PS:为便于读者阅读源码,上述代码使用在线工具http://tools./code/jb51_php_format进行了格式化处理。

更多关于PHP相关内容感兴趣的读者可查看本站专题:《php+mysql数据库操作入门教程》、《php+mysqli数据库程序设计技巧总结》、《php面向对象程序设计入门教程》、《PHP数组(Array)操作技巧大全》、《php字符串(string)用法总结》、《PHP网络编程技巧总结》及《php常见数据库操作技巧汇总》

希望本文所述对大家PHP程序设计有所帮助。


# php  # mysqldb  # 读写分离  # 操作类  # Thinkphp实现MySQL读写分离操作示例  # 使用PHP实现Mysql读写分离  # PHP+MYSQL实现读写分离简单实战  # php实现带读写分离功能的MySQL类完整实例  # thinkphp下MySQL数据库读写分离代码剖析  # PHP+MYSQL实现用户的增删改查  # PHP连接和操作MySQL数据库基础教程  # php mysql数据库操作类  # PHP实现的mysql读写分离操作示例  # 程序设计  # 操作技巧  # 相关内容  # 感兴趣  # 给大家  # 分页  # 不作  # 更多关于  # 所述  # 面向对象  # 进行了  # 编程技巧  # 讲述了  # mysql_query  # SET  # mysql_connect  # version  # binary  # character_set_client  # character_set_connection 


相关文章: 如何高效完成自助建站业务培训?  建站之星如何助力网站排名飙升?揭秘高效技巧  网站制作怎么样才能赚钱,用自己的电脑做服务器架设网站有什么利弊,能赚钱吗?  招贴海报怎么做,什么是海报招贴?  如何用已有域名快速搭建网站?  广州网站设计制作一条龙,广州巨网网络科技有限公司是干什么的?  建站之星ASP如何实现CMS高效搭建与安全管理?  如何快速生成专业多端适配建站电话?  如何高效配置香港服务器实现快速建站?  如何选择网络建站服务器?高效建站必看指南  如何在西部数码注册域名并快速搭建网站?  宝华建站服务条款解析:五站合一功能与SEO优化设置指南  建站之星安装后如何配置SEO及设计样式?  杭州银行网站设计制作流程,杭州银行怎么开通认证方式?  营销式网站制作方案,销售哪个网站招聘效果最好?  网站规划与制作是什么,电子商务网站系统规划的内容及步骤是什么?  如何通过NAT技术实现内网高效建站?  江苏网站制作公司有哪些,江苏书法考级官方网站?  音响网站制作视频教程,隆霸音响官方网站?  网页设计与网站制作内容,怎样注册网站?  深入理解Android中的xmlns:tools属性  如何在橙子建站上传落地页?操作指南详解  c++怎么用jemalloc c++替换默认内存分配器【性能】  网站企业制作流程,用什么语言做企业网站比较好?  c++ stringstream用法详解_c++字符串与数字转换利器  建站主机与服务器功能差异如何区分?  自助网站制作软件,个人如何自助建网站?  官网建站费用明细查询_企业建站套餐价格及收费标准指南  建站之星安装模板失败:服务器环境不兼容?  北京建设网站制作公司,北京古代建筑博物馆预约官网?  如何快速启动建站代理加盟业务?  网站按钮制作软件,如何实现网页中按钮的自动点击?  如何通过网站建站时间优化SEO与用户体验?  广州营销型建站服务商推荐:技术优势与SEO优化解析  javascript中对象的定义、使用以及对象和原型链操作小结  ppt制作免费网站有哪些,ppt模板免费下载网站?  网站设计制作公司地址,网站建设比较好的公司都有哪些?  Avalonia如何实现跨窗口通信 Avalonia窗口间数据传递  合肥做个网站多少钱,合肥本地有没有比较靠谱的交友平台?  学校为何禁止电信移动建设网站?  学校建站服务器如何选型才能满足性能需求?  成都网站制作报价公司,成都工业用气开户费用?  如何在IIS中新建站点并配置端口与物理路径?  高端建站三要素:定制模板、企业官网与响应式设计优化  建站之星3.0如何解决常见操作问题?  大同网页,大同瑞慈医院官网?  如何选购建站域名与空间?自助平台全解析  音乐网站服务器如何优化API响应速度?  如何解决ASP生成WAP建站中文乱码问题?  如何通过西部数码建站助手快速创建专业网站? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。