PHP教程 MySQL读写分离由PHP实现_第1页
PHP教程 MySQL读写分离由PHP实现_第2页
PHP教程 MySQL读写分离由PHP实现_第3页
PHP教程 MySQL读写分离由PHP实现_第4页
PHP教程 MySQL读写分离由PHP实现_第5页
已阅读5页,还剩1页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

PHP教程MySQL读写分离由PHP实现本代码是从uchome的代码修改的,是因为要解决uchome的效率而处理的。PHP实现的Mysql读写分离主要特性:简单的读写分离一个主数据库,可以添加更多的只读数据库读写分离但不用担心某些特性不支持缺点:同时连接两个数据库英文比较烂,也写几个字吧phpcodeformysqlread/writesplitfeature:simplyrwsplitonemaster,canaddmoreslavessupportallmysqlfeaturelinktothemasterandslaveatthesametimePHP代码:mysql_rw_php.class.php<?php/*******************************************mysql-rw-phpversion0.1@2009-4-16***codebyhqlulu#******/p/mysql-rw-php/***codemodifyfromclass_mysql.php(uchome)****************************************/classmysql_rw_php{//查询个数var$querynum=0;//当前操作的数据库连接var$link=null;//字符集var$charset;//当前数据库var$cur_db='';//是否存在有效的只读数据库连接var$ro_exist=false;//只读数据库连接var$link_ro=null;//读写数据库连接var$link_rw=null;functionmysql_rw_php(){}functionconnect($dbhost,$dbuser,$dbpw,$dbname='',$pconnect=0,$halt=TRUE){if($pconnect){if(!$this->link=@mysql_pconnect($dbhost,$dbuser,$dbpw)){$halt&&$this->halt('CannotconnecttoMySQLserver');}}else{if(!$this->link=@mysql_connect($dbhost,$dbuser,$dbpw)){$halt&&$this->halt('CannotconnecttoMySQLserver');}}//只读连接失败if(!$this->link&&!$halt)returnfalse;//未初始化rw时,第一个连接作为rwif($this->link_rw==null)$this->link_rw=$this->link;if($this->version()>'4.1'){if($this->charset){@mysql_query("SETcharacter_set_connection=$this->charset,character_set_results=$this->charset,character_set_client=binary",$this->link);}if($this->version()>'5.0.1'){@mysql_query("SETsql_mode=''",$this->link);}}if($dbname){$this->select_db($dbname);}}//连接一个只读的mysql数据库functionconnect_ro($dbhost,$dbuser,$dbpw,$dbname='',$pconnect=0){if($this->link_rw==null)$this->link_rw=$this->link;$this->link=null;//不产生halt错误$this->connect($dbhost,$dbuser,$dbpw,$dbname,$pconnect,false);if($this->link){//连接成功//echo"linkrosussess!<br>";$this->ro_exist=true;$this->link_ro=$this->link;if($this->cur_db){//如果已经选择过数据库则需要操作一次@mysql_select_db($this->cur_db,$this->link_ro);}}else{//连接失败//echo"linkrofailed!<br>";$this->link=&$this->link_rw;}}//设置一系列只读数据库并且连接其中一个functionset_ro_list($ro_list){if(is_array($ro_list)){//随机选择其中一个$link_ro=$ro_list[array_rand($ro_list)];$this->connect_ro($link_ro['dbhost'],$link_ro['dbuser'],$link_ro['dbpw']);}}functionselect_db($dbname){//同时操作两个数据库连接$this->cur_db=$dbname;if($this->ro_exist){@mysql_select_db($dbname,$this->link_ro);}return@mysql_select_db($dbname,$this->link_rw);}functionfetch_array($query,$result_type=MYSQL_ASSOC){returnmysql_fetch_array($query,$result_type);}functionfetch_one_array($sql,$type=''){$qr=$this->query($sql,$type);return$this->fetch_array($qr);}functionquery($sql,$type=''){$this->link=&$this->link_rw;//判断是否select语句if($this->ro_exist&&preg_match("/^(\s*)select/i",$sql)){$this->link=&$this->link_ro;}$func=$type=='UNBUFFERED'&&@function_exists('mysql_unbuffered_query')?'mysql_unbuffered_ry':'mysql_query';if(!($query=$func($sql,$this->link))&&$type!='SILENT'){$this->halt('MySQLQueryError',$sql);}$this->querynum++;return$query;}functionaffected_rows(){returnmysql_affected_rows($this->link);}functionerror(){return(($this->link)?mysql_error($this->link):mysql_error());}functionerrno(){returnintval(($this->link)?mysql_errno($this->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);}functioninsert_id(){return($id=mysql_insert_id($this->link))>=0?$id:$this->result($this->query("SELECTlast_insert_id()"),0);}functionfetch_row($query){$query=mysql_fetch_row($query);return$query;}functionfetch_fields($query){returnmysql_fetch_field($query);}functionversion(){returnmysql_get_server_info($this->link);}functionclose(){returnmysql_close($this->link);}functionhalt($message='',$sql=''){$dberror=$this->error();$dberrno=$this->errno();echo"<divstyle=\"position:absolute;font-size:11px;font-family:verdana,arial;background:#EBEBEB;padding:0.5em;\"><b>MySQLError</b><br><b>Message</b>:$message<br><b>SQL</b>:$sql<br><b>Error</b>:$dberror<br><b>Errno.</b>:$dberrno<br></div>";exit();}}?>example.php<?php/*******************************************mysql-rw-phpversion0.1@2009-4-16***codebyhqlulu#******/p/mysql-rw-php/***codemodifyfromclass_mysql.php(uchome)****************************************/require_once('mysql_rw_php.class.php');//rwinfo$db_rw=array('dbhost'=>'','dbuser'=>'aslibra','dbpw'=>'','dbname'=>'test');$db_ro=array(array('dbhost'=>':4306','dbuser'=>'aslibra','dbpw'=>''));$DB=newmysql_rw_php;//connectMaster$DB->connect($db_rw[dbhost],$db_rw[dbuser],$db_rw[dbpw],$db_rw[dbname]);//Method1:connectoneserver$DB->connect_ro($db_ro[0][dbhost

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论