php实现的mysqldb读写分离操作类示例
本文实例讲述了php实现的mysqldb读写分离操作类。分享给大家供大家参考,具体如下:
/** *phpMysqlDB读写分离类 *----------------------------------------------------- *$Source:http://code.ilaopo.net/php.class.mysqldb$ *$Author:BevinChen$ *$Email:bevin#lifa8.cn$ *$Date:2009-10-10$ *----------------------------------------------------- */ classmysqldb{ var$querynum=0; var$linkr,$linkw,$charset,$pconnect,$dbconfig; function__constructor($dbarray){ $this->mysqldb($dbarray); } functionmysqldb($dbarray,$dbcharset='utf8',$pcontent=0){ if(!is_array($dbarray[0])){ echo"数据库参数错误"; returnfalse; } $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; } } functionconnect($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("SETcharacter_set_connection=".$this->charset.",character_set_results=".$this->charset.",character_set_client=binary",$link); } if($this->version($link)>'5.0.1'){ @mysql_query("SETsql_mode=''",$link); } } if($dbname){ @mysql_select_db($dbname,$link); } //print_r($link); return$link; }else{ returnfalse; } } functionconnectM(){ 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>"; } functionconnectS(){ 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; } } //dbread functionquery($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; } functionfetch_array($query,$result_type=MYSQL_ASSOC){ return@mysql_fetch_array($query,$result_type); } functionfetch_row($query){ $query=mysql_fetch_row($query); return$query; } functionfetch_One($sql){ $query=$this->query($sql); return$this->fetch_row($query); } /*获取分页方法*/ functionfetch_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; } //dbwrite functionqueryw($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; } functionupdate($table,$where,$array){ $whereset=$set=$dot=''; foreach($arrayas$key=>$value){ $set.=$dot."`$key`='$value'"; $dot=','; } $whereset=$dot=''; foreach($whereas$k=>$v){ $whereset.=$dot."`$k`='$v'"; $dot='and'; } $sql="update$tableset$setwhere$whereset"; return$this->queryw($sql); } functioninsert($table,$array){ $col=$v=$dot=''; foreach($arrayas$key=>$value){ $v.=$dot."'$value'"; $col.=$dot."`$key`"; $dot=','; } $sql="insertinto$table($col)values($v)"; if($this->queryw($sql)){ return$this->insert_id(); }else{ returnfalse; } } functioninsert_id(){ return($id=mysql_insert_id($this->linkw))>=0?$id:$this->result($this->queryw("SELECTlast_insert_id()"),0); } //dbother functionaffected_rows($link){ returnmysql_affected_rows($link); } functionerror($link){ return(($link)?mysql_error($link):mysql_error()); } functionerrno($link){ returnintval(($link)?mysql_errno($link):mysql_errno()); } functionresult($query,$row){ $query=@mysql_result($query,$row); return$query; } functionnum_rows($query){ $query=mysql_num_rows($query); return$query; } functionnum_fields($query){ returnmysql_num_fields($query); } functionfree_result($query){ returnmysql_free_result($query); } functionfetch_fields($query){ returnmysql_fetch_field($query); } functionversion($link){ returnmysql_get_server_info($link); } functionclose($link){ returnmysql_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=newmysqldb($dbarray,'utf8'); *$array=array('name'=>date("Y-m-dH:i:s")); *$id=$newdb->insert("test",$array); *$result=$newdb->fetch_page("select*fromtestorderbyiddesc",'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程序设计有所帮助。