本文实例讲述了php实现的mysqldb读写分离操作类。分享给大家供大家参考,具体如下:
/**
* php MysqlDB 读写分离类
* -----------------------------------------------------
* $Source: http://code.ilaopo.net/php.class.mysqldb $
* $Author: Bevin Chen $
* $Email: bevin#lifa8.cn $
* $Date: 2009-10-10 $
* -----------------------------------------------------
*/
class mysqldb {
var $querynum = 0;
var $linkr,$linkw,$charset,$pconnect,$dbconfig;
function __constructor($dbarray) {
$this->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, $dbuser, $dbpw);
} else {
$link = @mysql_connect($dbhost, $dbuser, $dbpw, 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 "<br>##connectM!.<br>";
}
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 "<br>##connectS!.<br>";
} 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','password','test');
* $dbarray[] = array('192.168.1.77','cxh','password','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:为便于读者阅读源码,上述代码使用在线工具http://tools./code/jb51_php_format进行了格式化处理。
更多关于PHP相关内容感兴趣的读者可查看本站专题:《php+mysql数据库操作入门教程》、《php+mysqli数据库程序设计技巧总结》、《php面向对象程序设计入门教程》、《PHP数组(Array)操作技巧大全》、《php字符串(string)用法总结》、《PHP网络编程技巧总结》及《php常见数据库操作技巧汇总》
希望本文所述对大家PHP程序设计有所帮助。
# php
# mysqldb
# 读写分离
# 操作类
# Thinkphp实现MySQL读写分离操作示例
# 使用PHP实现Mysql读写分离
# PHP+MYSQL实现读写分离简单实战
# php实现带读写分离功能的MySQL类完整实例
# thinkphp下MySQL数据库读写分离代码剖析
# PHP+MYSQL实现用户的增删改查
# PHP连接和操作MySQL数据库基础教程
# php mysql数据库操作类
# PHP实现的mysql读写分离操作示例
# 程序设计
# 操作技巧
# 相关内容
# 感兴趣
# 给大家
# 分页
# 不作
# 更多关于
# 所述
# 面向对象
# 进行了
# 编程技巧
# 讲述了
# mysql_query
# SET
# mysql_connect
# version
# binary
# character_set_client
# character_set_connection
相关文章:
完全自定义免费建站平台:主题模板在线生成一站式服务
网站制作员失业,怎样查看自己网站的注册者?
深圳网站制作的公司有哪些,dido官方网站?
公司网站设计制作厂家,怎么创建自己的一个网站?
如何优化Golang Web性能_Golang HTTP服务器性能提升方法
如何获取开源自助建站系统免费下载链接?
建站之星导航菜单设置与功能模块配置全攻略
南宁网站建设制作定制,南宁网站建设可以定制吗?
在线ppt制作网站有哪些软件,如何把网页的内容做成ppt?
php能控制zigbee模块吗_php通过串口与cc2530 zigbee通信【介绍】
定制建站价位费用解析与套餐推荐全攻略
中山网站推广排名,中山信息港登录入口?
Python路径拼接规范_跨平台处理说明【指导】
网站微信制作软件,如何制作微信链接?
视频网站app制作软件,有什么好的视频聊天网站或者软件?
如何用花生壳三步快速搭建专属网站?
如何在Windows服务器上快速搭建网站?
制作销售网站教学视频,销售网站有哪些?
教学网站制作软件,学习*后期制作的网站有哪些?
建站主机CVM配置优化、SEO策略与性能提升指南
电商平台网站制作流程,电商网站如何制作?
建站10G流量真的够用吗?如何应对访问高峰?
如何在服务器上配置二级域名建站?
大连网站制作公司哪家好一点,大连买房网站哪个好?
江苏网站制作公司有哪些,江苏书法考级官方网站?
如何在服务器上三步完成建站并提升流量?
如何在VPS电脑上快速搭建网站?
网站制作新手教程,新手建设一个网站需要注意些什么?
专业网站设计制作公司,如何制作一个企业网站,建设网站的基本步骤有哪些?
韩国网站服务器搭建指南:VPS选购、域名解析与DNS配置推荐
建站之星北京办公室:智能建站系统与小程序生成方案解析
我的世界制作壁纸网站下载,手机怎么换我的世界壁纸?
如何在Windows 2008云服务器安全搭建网站?
沈阳制作网站公司排名,沈阳装饰协会官方网站?
高性能网站服务器配置指南:安全稳定与高效建站核心方案
如何通过网站建站时间优化SEO与用户体验?
娃派WAP自助建站:免费模板+移动优化,快速打造专业网站
营销式网站制作方案,销售哪个网站招聘效果最好?
微信h5制作网站有哪些,免费微信H5页面制作工具?
图片制作网站免费软件,有没有免费的网站或软件可以将图片批量转为A4大小的pdf?
制作农业网站的软件,比较好的农业网站推荐一下?
C++ static_cast和dynamic_cast区别_C++静态转换与动态类型安全转换
建站之星如何实现五合一智能建站与营销推广?
建站之星在线客服如何快速接入解答?
商务网站制作工程师,从哪几个方面把握电子商务网站主页和页面的特色设计?
,交易猫的商品怎么发布到网站上去?
如何选择高效可靠的多用户建站源码资源?
股票网站制作软件,网上股票怎么开户?
如何用已有域名快速搭建网站?
深圳网站制作公司好吗,在深圳找工作哪个网站最好啊?
*请认真填写需求信息,我们会在24小时内与您取得联系。