PHP教程 MySQL讀寫分離由PHP實現(xiàn)_第1頁
PHP教程 MySQL讀寫分離由PHP實現(xiàn)_第2頁
PHP教程 MySQL讀寫分離由PHP實現(xiàn)_第3頁
PHP教程 MySQL讀寫分離由PHP實現(xiàn)_第4頁
PHP教程 MySQL讀寫分離由PHP實現(xiàn)_第5頁
已閱讀5頁,還剩1頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)

文檔簡介

PHP教程MySQL讀寫分離由PHP實現(xiàn)本代碼是從uchome的代碼修改的,是因為要解決uchome的效率而處理的。PHP實現(xiàn)的Mysql讀寫分離主要特性:簡單的讀寫分離一個主數(shù)據(jù)庫,可以添加更多的只讀數(shù)據(jù)庫讀寫分離但不用擔(dān)心某些特性不支持缺點:同時連接兩個數(shù)據(jù)庫英文比較爛,也寫幾個字吧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{//查詢個數(shù)var$querynum=0;//當(dāng)前操作的數(shù)據(jù)庫連接var$link=null;//字符集var$charset;//當(dāng)前數(shù)據(jù)庫var$cur_db='';//是否存在有效的只讀數(shù)據(jù)庫連接var$ro_exist=false;//只讀數(shù)據(jù)庫連接var$link_ro=null;//讀寫數(shù)據(jù)庫連接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數(shù)據(jù)庫functionconnect_ro($dbhost,$dbuser,$dbpw,$dbname='',$pconnect=0){if($this->link_rw==null)$this->link_rw=$this->link;$this->link=null;//不產(chǎn)生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){//如果已經(jīng)選擇過數(shù)據(jù)庫則需要操作一次@mysql_select_db($this->cur_db,$this->link_ro);}}else{//連接失敗//echo"linkrofailed!<br>";$this->link=&$this->link_rw;}}//設(shè)置一系列只讀數(shù)據(jù)庫并且連接其中一個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){//同時操作兩個數(shù)據(jù)庫連接$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. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論