本文实例讲述了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 readfunction 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 writefunction 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 otherfunction 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.jb51.net/code/jb51_php_format进行了格式化处理。
更多关于PHP相关内容感兴趣的读者可查看本站专题:《php+mysql数据库操作入门教程》、《php+mysqli数据库程序设计技巧总结》、《php面向对象程序设计入门教程》、《PHP数组(Array)操作技巧大全》、《php字符串(string)用法总结》、《PHP网络编程技巧总结》及《php常见数据库操作技巧汇总》
希望本文所述对大家PHP程序设计有所帮助。