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设计模式 Template (模板模式)
Jun 26 PHP
通达OA公共代码 php常用检测函数
Dec 14 PHP
使用php批量删除数据库下所有前缀为prefix_的表
Jun 09 PHP
PHP中的Streams详细介绍
Nov 12 PHP
yii用户注册表单验证实例
Dec 26 PHP
PHP消息队列用法实例分析
Feb 12 PHP
PHP魔术方法使用方法汇总
Feb 14 PHP
CI框架实现优化文件上传及多文件上传的方法
Jan 04 PHP
PHP去除字符串最后一个字符的三种方法实例
Mar 01 PHP
Laravel Intervention/image图片处理扩展包的安装、使用与可能遇到的坑详解
Nov 14 PHP
Ajax中的JSON格式与php传输过程全面解析
Nov 14 PHP
PHP面向对象五大原则之单一职责原则(SRP)详解
Apr 04 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
如何开始收听短波广播
2021/03/01 无线电
在“咖啡之国”感受咖啡文化
2021/03/03 咖啡文化
php生成过去100年下拉列表的方法
2015/07/20 PHP
精解window.setTimeout()&window.setInterval()使用方式与参数传递问题!
2007/11/23 Javascript
JavaScript 程序编码规范
2010/11/23 Javascript
使用滤镜设置透明导致 IE 6/7/8/9 解析异常的解决方法
2011/04/07 Javascript
jquery怎样实现ajax联动框(二)
2013/03/08 Javascript
jquery用get实现ajax在ie里面刷新不进入后台解决方法
2013/08/12 Javascript
JavaScript的代码编写格式规范指南
2015/12/07 Javascript
jQuery实现本地预览上传图片功能
2016/01/08 Javascript
学习Angularjs分页指令
2016/07/01 Javascript
js 调用百度分享功能
2017/02/27 Javascript
用react-redux实现react组件之间数据共享的方法
2018/06/08 Javascript
如何通过JS实现转码与解码
2020/02/21 Javascript
vue.js中使用微信扫一扫解决invalid signature问题(完美解决)
2020/04/11 Javascript
JavaScript Html实现移动端红包雨功能页面
2021/01/10 Javascript
Python专用方法与迭代机制实例分析
2014/09/15 Python
Python爬虫:通过关键字爬取百度图片
2017/02/17 Python
python实现人脸识别代码
2017/11/08 Python
python正则表达式面试题解答
2020/04/28 Python
python购物车程序简单代码
2018/04/18 Python
Python实现的拟合二元一次函数功能示例【基于scipy模块】
2018/05/15 Python
python 顺时针打印矩阵的超简洁代码
2018/11/14 Python
PyQt5 在label显示的图片中绘制矩形的方法
2019/06/17 Python
python函数声明和调用定义及原理详解
2019/12/02 Python
selenium+python实现自动登陆QQ邮箱并发送邮件功能
2019/12/13 Python
python 调整图片亮度的示例
2020/12/03 Python
什么是命名空间(NameSpace)
2015/11/24 面试题
冰淇淋店创业计划书范文
2013/12/27 职场文书
秋游活动策划方案
2014/02/16 职场文书
学习保证书范文
2014/04/30 职场文书
2014初中数学教研组工作总结
2014/12/19 职场文书
2015感人爱情寄语
2015/02/26 职场文书
研究生给导师的自荐信
2015/03/06 职场文书
反腐倡廉心得体会2016
2016/01/13 职场文书
JAVA长虹键法之建造者Builder模式实现
2022/04/10 Java/Android