本文实例讲述了PHP实现的MysqLdb读写分离操作类。分享给大家供大家参考,具体如下:
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,$dbpw);
} else {
$link = @MysqL_connect($dbhost,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 "
##connectM!.
"; } 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 "
##connectS!.
"; } else { if(!$this->linkw) { $this->connectM(); } $this->linkr = $this->linkw; } } // db read function 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 write function 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 other function 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','test'); * $dbarray[] = array('192.168.1.77','cxh','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; */
##connectM!.
"; } 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 "
##connectS!.
"; } else { if(!$this->linkw) { $this->connectM(); } $this->linkr = $this->linkw; } } // db read function 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 write function 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 other function 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','test'); * $dbarray[] = array('192.168.1.77','cxh','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:
为便于读者阅读源码,上述代码使用在线工具进行了格式化处理。更多关于PHP相关内容感兴趣的读者可查看本站专题:《》、《》、《》、《》、《》、《》及《》
希望本文所述对大家PHP程序设计有所帮助。
原文链接:https://www.f2er.com/php/18018.html