thinkphp 框架数据库切换实现方法分析


Posted in PHP onMay 18, 2020

本文实例讲述了thinkphp 框架数据库切换实现方法。分享给大家供大家参考,具体如下:

数据库配置:

//数据库配置1
'db_config1' => [
  // 数据库类型
  'type'    => 'mysql',
  // 服务器地址
  'hostname'  => '127.0.0.1',
  // 数据库名
  'database'  => 'thinkphp',
  // 数据库用户名
  'username'  => 'root',
  // 数据库密码
  'password'  => '',
  // 数据库编码默认采用utf8
  'charset'   => 'utf8',
  // 数据库表前缀
  'prefix'   => 'think_',
],
//数据库配置2
'db_config2' => 'mysql://root:1234@localhost:3306/thinkphp#utf8';
//默认数据库读取数据
$test = Db::name("test")->select();
//第二个数据库读取数据
$test1=Db::connect("DB_Config_1")->name("test")->select();

application/config.php

$db1 = [ 
'type'=>'mysql', 
'hostname'=>'127.0.0.1', 
'database'=>'testA', 
'username'=>'root', 
'password'=>'123456', 
'hostport'=>'3306', 
'params'=>[], 
'charset'=>'utf8', 
'prefix'=>'', ], 
$db2 = [ 
'type'=>'mysql', 
'hostname'=>'127.0.0.1', 
atabase'=>'testB', 
'username'=>'root', 
'password'=>'123456', 
'hostport'=>'3306', 
'params'=>[], 
'charset'=>'utf8', 
'prefix'=>'', ], 
Db::connect('db1')->query('select * from user where age=25');

方法配置

我们可以在调用Db类的时候动态定义连接信息,例如:

Db::connect([
  // 数据库类型
  'type'    => 'mysql',
  // 数据库连接DSN配置
  'dsn'     => '',
  // 服务器地址
  'hostname'  => '127.0.0.1',
  // 数据库名
  'database'  => 'thinkphp',
  // 数据库用户名
  'username'  => 'root',
  // 数据库密码
  'password'  => '',
  // 数据库连接端口
  'hostport'  => '',
  // 数据库连接参数
  'params'   => [],
  // 数据库编码默认采用utf8
  'charset'   => 'utf8',
  // 数据库表前缀
  'prefix'   => 'think_',
]);

或者使用字符串方式:

Db::connect('mysql://root:1234@127.0.0.1:3306/thinkphp#utf8');

字符串连接的定义格式为:

数据库类型://用户名:密码@数据库地址:数据库端口/数据库名#字符集

注意:字符串方式可能无法定义某些参数,例如前缀和连接参数。

如果我们已经在应用配置文件(注意这里不是数据库配置文件)中配置了额外的数据库连接信息,例如:

//数据库配置1
'db_config1' => [
  // 数据库类型
  'type'    => 'mysql',
  // 服务器地址
  'hostname'  => '127.0.0.1',
  // 数据库名
  'database'  => 'thinkphp',
  // 数据库用户名
  'username'  => 'root',
  // 数据库密码
  'password'  => '',
  // 数据库编码默认采用utf8
  'charset'   => 'utf8',
  // 数据库表前缀
  'prefix'   => 'think_',
],
//数据库配置2
'db_config2' => 'mysql://root:1234@localhost:3306/thinkphp#utf8';

我们可以改成

Db::connect('db_config1');
Db::connect('db_config2');

thinkphp 框架数据库切换实现方法分析

database.php是框架默认的数据库配置,里面写数据库1的信息,新建了个database2.php是放置数据库2的信息。

创建完数据库2之后,在config配置文件里,文件最后引入数据库2的配置信息

$db_con2 = require_once ('database2.php'),
'db_con2' => $db_con2,

代码中引用:

选择数据库1的时候,我是用模型查询的直接写SQL语句:

//模型查询
$user = new User();
$result = $user->where('username', $data['username'])
        ->where('password', $data['password'])
        ->find();

或者

User::where('id','1')->find();
//普通结构查询
Db::table('think_user')->where('id',1)->find();

查询数据库2的信息时,调用普通查询语句:

$list = Db::connect('db_con2')
->table('nrf_amf_reg_info')
->alias('r')
->join('nrf_amf_server s','r.Id = s.nrf_amf_reg_Id','LEFT')
->paginate();

或者

$list = Db::connect('db_con2')->name('nrf_disc_record')->paginate();

注:nrf_amf_reg_info和nrf_disc_record为表名

希望本文所述对大家基于ThinkPHP框架的PHP程序设计有所帮助。

PHP 相关文章推荐
简单的移动设备检测PHP脚本代码
Feb 19 PHP
PHP缩略图等比例无损压缩,可填充空白区域补充色
Jun 10 PHP
基于preg_match_all采集后数据处理的一点心得笔记(编码转换和正则匹配)
Jan 31 PHP
ThinkPHP3.1新特性之命名范围的使用
Jun 19 PHP
php实现根据字符串生成对应数组的方法
Sep 22 PHP
php防止CC攻击代码 php防止网页频繁刷新
Dec 21 PHP
Laravel框架实现发送短信验证功能代码
Jun 06 PHP
详解PHP实现定时任务的五种方法
Jul 25 PHP
浅谈Yii乐观锁的使用及原理
Jul 25 PHP
PHP单例模式与工厂模式详解
Aug 29 PHP
PHP实现的AES加密、解密封装类与用法示例
Aug 02 PHP
启用OPCache提高PHP程序性能的方法
Mar 21 PHP
PHP接口类(interface)的定义、特点和应用示例
May 18 #PHP
php + ajax 实现的写入数据库操作简单示例
May 16 #PHP
PHP date_default_timezone_set()设置时区操作实例分析
May 16 #PHP
Yii框架应用组件用法实例分析
May 15 #PHP
Yii框架小部件(Widgets)用法实例详解
May 15 #PHP
Yii框架安装简明教程
May 15 #PHP
php字符串函数 str类常见用法示例
May 15 #PHP
You might like
PHP和Mysqlweb应用开发核心技术 第1部分 Php基础-1 开始了解php
2011/07/03 PHP
php中count获取多维数组长度的方法
2014/11/03 PHP
PHP is_array() 检测变量是否是数组的实现方法
2016/06/13 PHP
国外Lightbox v2.03.3 最新版 下载
2007/10/17 Javascript
Javascript匿名函数的一种应用 代码封装
2010/06/27 Javascript
jQuery UI的Dialog无法提交问题的解决方法
2011/01/11 Javascript
详解javascript new的运行机制
2016/01/26 Javascript
jquery对Json的各种遍历方法总结(必看篇)
2016/09/29 Javascript
AngularJS框架的ng-app指令与自动加载实现方法分析
2017/01/04 Javascript
JQuery实现定时刷新功能代码
2017/05/09 jQuery
Angular2整合其他插件的方法
2018/01/20 Javascript
vue+SSM实现验证码功能
2018/12/07 Javascript
微信小程序HTTP接口请求封装代码实例
2019/09/05 Javascript
vue图片上传组件使用详解
2019/12/23 Javascript
编写Python脚本使得web页面上的代码高亮显示
2015/04/24 Python
Python实现的彩票机选器实例
2015/06/17 Python
Python的Tornado框架实现图片上传及图片大小修改功能
2016/06/30 Python
python3利用smtplib通过qq邮箱发送邮件方法示例
2017/12/03 Python
Python操作word常见方法示例【win32com与docx模块】
2018/07/17 Python
基于PyQt4和PySide实现输入对话框效果
2019/02/27 Python
Python3从零开始搭建一个语音对话机器人的实现
2019/08/23 Python
如何基于Python爬虫爬取美团酒店信息
2020/11/03 Python
浅谈CSS3中display属性的Flex布局的方法
2017/08/14 HTML / CSS
网页中的电话号码如何实现一键直呼效果_附示例
2016/03/15 HTML / CSS
新百伦折扣店:Joe’s New Balance Outlet
2016/08/20 全球购物
俄罗斯最大的隐形眼镜销售网站:Ochkov.Net
2021/02/07 全球购物
应用服务器有那些
2012/01/19 面试题
酒店管理专业学生求职信
2013/09/27 职场文书
宗教学大学生职业生涯规划范文
2014/02/08 职场文书
红色旅游心得体会
2014/09/03 职场文书
缅怀先烈演讲稿
2014/09/03 职场文书
党的群众路线批评与自我批评范文
2014/10/16 职场文书
学校远程教育工作总结
2015/08/11 职场文书
2016年五一劳动节专题校园广播稿
2015/12/17 职场文书
盘点2020年适合农村地区创业的项目
2019/10/16 职场文书
Python 中 Shutil 模块详情
2021/11/11 Python