php中怎么实现Mysql读写分离操作
php中怎么实现Mysql读写分离操作,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。
连接案例:
<?phprequire_once('mysql_rw_php.class.php');$db_rw=array('dbhost'=>'www.aslibra.com','dbuser'=>'aslibra','dbpw'=>'www.aslibra.com','dbname'=>'test');$db_ro=array(array('dbhost'=>'www.aslibra.com:4306','dbuser'=>'aslibra','dbpw'=>'www.aslibra.com'));$DB=newmysql_rw_php;//写入连接,单服务器操作$DB->connect($db_rw[dbhost],$db_rw[dbuser],$db_rw[dbpw],$db_rw[dbname]);//读取连接,可以多服务器操作$DB->connect_ro($db_ro[0][dbhost],$db_ro[0][dbuser],$db_ro[0][dbpw]);$DB->set_ro_list($db_ro);//sendtorw$sql="insertintoaseta='test'";$DB->query($sql);//sendtoro$sql="select*froma";$qr=$DB->query($sql);while($row=$DB->fetch_array($qr)){echo$row[a];}?>
连接类:
<?phpclassmysql_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_query':'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();}}?>
看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注亿速云行业资讯频道,感谢您对亿速云的支持。
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。