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编程中字符串处理的5个技巧小结
Nov 13 PHP
php程序之die调试法 快速解决错误
Sep 17 PHP
phpexcel导出excel的颜色和网页中的颜色显示不一致
Dec 11 PHP
PHP不用递归实现无限分级的例子分享
Apr 18 PHP
PHP错误WARNING: SESSION_START() [FUNCTION.SESSION-START]解决方法
May 04 PHP
PHP实现过滤各种HTML标签
May 17 PHP
PHP进行批量任务处理不超时的解决方法
Jul 11 PHP
2017年最好用的9个php开发工具推荐(超好用)
Oct 23 PHP
基于 Swoole 的微信扫码登录功能实现代码
Jan 15 PHP
PHP实现APP微信支付的实例讲解
Feb 10 PHP
PHP工厂模式简单实现方法示例
May 23 PHP
php微信公众号开发之图片回复
Oct 20 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分页函数示例代码分享
2014/02/24 PHP
PHP+Mysql+jQuery查询和列表框选择操作实例讲解
2015/10/22 PHP
PHP-FPM 设置多pool及配置文件重写操作示例
2019/10/02 PHP
写了10年的Javascript也未必全了解的连续赋值运算
2011/03/25 Javascript
使用jquery实现select添加实现后台权限添加的效果
2011/05/28 Javascript
jQuery 对Select的操作备忘记录
2011/07/04 Javascript
JS实现点击图片在当前页面放大并可关闭的漂亮效果
2013/10/18 Javascript
BootstrapTable与KnockoutJS相结合实现增删改查功能【一】
2016/05/10 Javascript
jQuery移动端图片上传组件
2016/06/12 Javascript
JS原型与原型链的深入理解
2017/02/15 Javascript
JS实现一个简单的日历
2017/02/22 Javascript
node.js学习之断言assert的使用示例
2017/09/28 Javascript
浅谈vuepress 踩坑记
2018/04/18 Javascript
JavaScript时间与时间戳的转换操作实例分析
2018/12/07 Javascript
jQuery实现的点击显示隐藏下拉菜单功能完整示例
2019/05/17 jQuery
如何用原生js写一个弹窗消息提醒插件
2019/05/24 Javascript
ElementUI之Message功能拓展详解
2019/10/18 Javascript
JavaScript eval()函数定义及使用方法详解
2020/07/07 Javascript
浅谈python中对于json写入txt文件的编码问题
2018/06/07 Python
Python Datetime模块和Calendar模块用法实例分析
2019/04/15 Python
python应用文件读取与登录注册功能
2019/09/23 Python
Python的形参和实参使用方式
2019/12/24 Python
pytorch 批次遍历数据集打印数据的例子
2019/12/30 Python
Python3和PyCharm安装与环境配置【图文教程】
2020/02/14 Python
详解python第三方库的安装、PyInstaller库、random库
2021/03/03 Python
幼师自荐信范文
2013/10/06 职场文书
4s客服专员岗位职责
2013/12/01 职场文书
写给老师的表扬信
2014/01/21 职场文书
银行开业庆典方案
2014/02/06 职场文书
搞笑创意广告语
2014/03/17 职场文书
单位授权委托书范文
2014/08/02 职场文书
2014年初级职称工作总结
2014/12/08 职场文书
2015年市场营销工作总结
2015/07/23 职场文书
八年级数学教学反思
2016/02/17 职场文书
2016年党风廉政建设承诺书
2016/03/25 职场文书
浅谈python中的多态
2021/06/15 Python