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

2018-09-07 19:01

阅读:271

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

   /** * php MysqlDB 读写分离类 * ----------------------------------------------------- * $Source: 数据库参数错误; 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); } } /* 测试例子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:为便于读者阅读源码,上述代码使用在线工具进行了格式化处理。

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

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


评论


亲,登录后才可以留言!