热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

PHP开发学习[7]——代码实现主从数据库读写分离

背景:项目规划中,要求进行主从数据库的读写分离,其中对于主从数据库的创建和配置,网上有很充实的介绍,这里仅在配

     背景:项目规划中,要求进行主从数据库的读写分离,其中对于主从数据库的创建和配置,网上有很充实的介绍,这里仅在配置成功的基础上进行代码端的判断实现。


1.ThinkPHP框架中,已经集成了主从数据库的操作,其中只需要对配置文件中的相应代码做修改即可。

具体的介绍可以参考官方开发文档的介绍.




2.如果使用原生语句进行开发,需要进行sql语句的判断,根据网上的一些介绍和参考,核心代码如下。

值得一提的是,此处使用了mysql_connect()连接,据官方解释,强烈建议使用mysqli或者pdo连接.

所以,可以自行改动呗...



 

3.解释好麻烦,粘贴示例代码,自行参考,欢迎指正...


header('Content-Type: text/html;charset = utf-8 ');
/*** User: zhanghj*/
define("DB_HOST_1","192.168.1.73");//请正确对应 IP 地址 用户名 密码 即可...
define("DB_USER_1","momomo");
define("DB_PWD_1","000000");define("DB_HOST_2","192.168.1.74");
define("DB_USER_2","nonono");
define("DB_PWD_2","000000");define("DB_DBNAME","minsheng");
define("DB_CHARSET","utf8");/*** 思路:根据传入的sql语句,判断是否为查询操作 此处使用 mysql* @param $sql 执行的SQL语句* @return resource*/
function connectTo($sql){$link = null;$querystr = trim($sql);$querystr = substr($querystr,0,6);if($querystr != 'select'){//如果不是查询语句就连接主服务器$link=@mysql_connect(DB_HOST_1,DB_USER_1,DB_PWD_1)or die("主库连接失败Error:".mysql_errno().":".mysql_error());print_r('主库连接成功');}else{//如果是查询语句就连接从服务器$link=@mysql_connect(DB_HOST_2,DB_USER_2,DB_PWD_2)or die("从库连接失败Error:".mysql_errno().":".mysql_error());print_r('从库连接成功');}mysql_set_charset(DB_CHARSET);//mysql_query('set names utf8');mysql_select_db(DB_DBNAME) or die("指定数据库打开失败");return $link;
}/*** 完成记录插入的操作* @param string $table* @param array $array* @return number*/
function insert($table,$array){$keys=join(",",array_keys($array));$vals="'".join("','",array_values($array))."'";$sql="insert {$table}($keys) values({$vals})";$link = connectTo($sql);mysql_query($sql);$Tag_id = mysql_insert_id();//根据需求 关闭连接mysql_close($link);return $Tag_id;
}function getResultNum($sql){$link = connectTo($sql);$result=mysql_query($sql);$Tag_num = mysql_num_rows($result);//根据需求 关闭连接mysql_close($link);return $Tag_num;
}/*使用提示:运行SQL语句前,首先调用connectTo($sql)方法,进行数据库链接的选择根据自己的项目需求,判断是否断开上述方法返回的连接
*///测试:
$data = array('user_name' => 'wo¥¥ 的名字','email' => '爱谁谁!别关心那么多,好嘛?'
);echo '我在测试呢!';
$tag =insert('ms_users',$data);
echo $tag;
echo '


';
echo '
';$res = getResultNum('select * from ms_users');
print_r($res);



4.执行代码,结果截图如下,其中第一张为初次运行的显示情况,第二张为刷新后的显示情况,跟数据表的字段限制有关,可自行检验。


      





5.补充使用mysqli面向对象思想的核心代码


/*** 思路:根据传入的sql语句,判断是否为查询操作 此处使用 mysqli* 前提是,开启mysqli的扩展功能* @param $sql 执行的SQL语句* @return resource*/
function connectTo($sql){$mysqli = null;$querystr = trim($sql);$querystr = substr($querystr,0,6);//使用 mysqli 面向对象方式进行数据库的连接操作if($querystr != 'select'){//如果不是查询语句就连接主服务器//创建对象并打开连接,最后一个参数是选择的数据库名称$mysqli = new mysqli(DB_HOST_1,DB_USER_1,DB_PWD_1,DB_DBNAME);//检查连接是否成功if (mysqli_connect_errno()){die('主库连接失败Error:'). mysqli_connect_error();}print_r('主库连接成功');}else{//如果是查询语句就连接从服务器$mysqli = new mysqli(DB_HOST_2,DB_USER_2,DB_PWD_2,DB_DBNAME);//检查连接是否成功if (mysqli_connect_errno()){die('从库连接失败Error::'). mysqli_connect_error();}print_r('从库连接成功');}$mysqli->query("set names '".DB_CHARSET."'");return $mysqli;
}






推荐阅读
  • 本文探讨了 Canvas 元素在不同尺寸设置下出现变形失真的原因,并详细解释了 HTML 尺寸和 CSS 尺寸的区别及其对视觉效果的影响。 ... [详细]
  • Docker 环境下 MySQL 双主同步配置指南
    本文介绍了如何在 Docker 环境中配置 MySQL 的双主同步,包括目录结构的创建、配置文件的编写、容器的创建与设置以及最终的验证步骤。 ... [详细]
  • 本文详细介绍了如何在PHP中记录和管理行为日志,包括ThinkPHP框架中的日志记录方法、日志的用途、实现原理以及相关配置。 ... [详细]
  • 网站访问全流程解析
    本文详细介绍了从用户在浏览器中输入一个域名(如www.yy.com)到页面完全展示的整个过程,包括DNS解析、TCP连接、请求响应等多个步骤。 ... [详细]
  • 本文介绍如何使用 Python 的 DOM 和 SAX 方法解析 XML 文件,并通过示例展示了如何动态创建数据库表和处理大量数据的实时插入。 ... [详细]
  • 本文介绍了如何使用 Node.js 和 Express(4.x 及以上版本)构建高效的文件上传功能。通过引入 `multer` 中间件,可以轻松实现文件上传。首先,需要通过 `npm install multer` 安装该中间件。接着,在 Express 应用中配置 `multer`,以处理多部分表单数据。本文详细讲解了 `multer` 的基本用法和高级配置,帮助开发者快速搭建稳定可靠的文件上传服务。 ... [详细]
  • vue引入echarts地图的四种方式
    一、vue中引入echart1、安装echarts:npminstallecharts--save2、在main.js文件中引入echarts实例:  Vue.prototype.$echartsecharts3、在需要用到echart图形的vue文件中引入:   importechartsfrom"echarts";4、如果用到map(地图),还 ... [详细]
  • Nacos 0.3 数据持久化详解与实践
    本文详细介绍了如何将 Nacos 0.3 的数据持久化到 MySQL 数据库,并提供了具体的步骤和注意事项。 ... [详细]
  • 包含phppdoerrorcode的词条 ... [详细]
  • 一个建表一个执行crud操作建表代码importandroid.content.Context;importandroid.database.sqlite.SQLiteDat ... [详细]
  • javascript分页类支持页码格式
    前端时间因为项目需要,要对一个产品下所有的附属图片进行分页显示,没考虑ajax一张张请求,所以干脆一次性全部把图片out,然 ... [详细]
  • 本文详细介绍了如何使用Python中的smtplib库来发送带有附件的邮件,并提供了完整的代码示例。作者:多测师_王sir,时间:2020年5月20日 17:24,微信:15367499889,公司:上海多测师信息有限公司。 ... [详细]
  • php更新数据库字段的函数是,php更新数据库字段的函数是 ... [详细]
  • 本文介绍了如何利用 `matplotlib` 库中的 `FuncAnimation` 类将 Python 中的动态图像保存为视频文件。通过详细解释 `FuncAnimation` 类的参数和方法,文章提供了多种实用技巧,帮助用户高效地生成高质量的动态图像视频。此外,还探讨了不同视频编码器的选择及其对输出文件质量的影响,为读者提供了全面的技术指导。 ... [详细]
  • 本文介绍了如何使用Python的Paramiko库批量更新多台服务器的登录密码。通过示例代码展示了具体实现方法,确保了操作的高效性和安全性。Paramiko库提供了强大的SSH2协议支持,使得远程服务器管理变得更加便捷。此外,文章还详细说明了代码的各个部分,帮助读者更好地理解和应用这一技术。 ... [详细]
author-avatar
书生
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有