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学习 变量使用总结
Mar 24 PHP
PHP防止跨域提交表单
Nov 01 PHP
php实现的返回数据格式化类实例
Sep 22 PHP
php操作xml入门之xml基本介绍及xml标签元素
Jan 23 PHP
CodeIgniter配置之autoload.php自动加载用法分析
Jan 20 PHP
HTML中嵌入PHP的简单方法
Feb 16 PHP
laravel + vue实现的数据统计绘图(今天、7天、30天数据)
Jul 31 PHP
php微信分享到朋友圈、QQ、朋友、微博
Feb 18 PHP
PHP应用跨时区功能的实现方法
Mar 21 PHP
php遍历目录下文件并按修改时间排序操作示例
Jul 12 PHP
在PHP中实现使用Guzzle执行POST和GET请求
Oct 15 PHP
深入理解PHP+Mysql分布式事务与解决方案
Dec 03 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 Static 关键字之旅模式
2015/11/13 PHP
用JS判断IE版本的代码 超管用!
2011/08/09 Javascript
使用forever管理nodejs应用教程
2014/06/03 NodeJs
js从Cookies里面取值的简单实现
2014/06/30 Javascript
jQuery仿Flash上下翻动的中英文导航菜单实例
2015/03/10 Javascript
jQuery旋转木马式幻灯片轮播特效
2015/12/04 Javascript
javascript实现一个简单的弹出窗
2016/02/22 Javascript
jQuery获取字符串中出现最多的数
2016/02/22 Javascript
js实现文字向上轮播功能
2017/01/13 Javascript
vue中的非父子间的通讯问题简单的实例代码
2017/07/19 Javascript
详解使用vscode+es6写nodejs服务端调试配置
2017/09/21 NodeJs
微信小程序实现渐入渐出动画效果
2019/06/13 Javascript
微信小程序添加插屏广告并设置显示频率(一天一次)
2019/12/06 Javascript
完美解决通过IP地址访问VUE项目的问题
2020/07/18 Javascript
Vue3 响应式侦听与计算的实现
2020/11/11 Javascript
[48:46]完美世界DOTA2联赛PWL S2 SZ vs FTD.C 第二场 11.19
2020/11/19 DOTA
Python中用于计算对数的log()方法
2015/05/15 Python
tensorflow: 查看 tensor详细数值方法
2018/06/13 Python
Python3内置模块pprint让打印比print更美观详解
2019/06/02 Python
基于Python获取照片的GPS位置信息
2020/01/20 Python
python中的yield from语法快速学习
2020/11/06 Python
纽约市的奢华内衣目的地:Anya Lust
2019/08/02 全球购物
乌克兰最大的家用电器和电子产品连锁店:Eldorado
2019/10/02 全球购物
水务局局长岗位职责
2013/11/28 职场文书
两年的个人工作自我评价
2014/01/10 职场文书
2015年幼儿园毕业感言
2014/02/12 职场文书
保安队长职务说明书
2014/02/23 职场文书
群众路线批评与自我批评发言稿
2014/10/16 职场文书
检查机关领导群众路线教育实践活动个人整改措施
2014/10/28 职场文书
药店收银员岗位职责
2015/04/07 职场文书
淮海战役观后感
2015/06/11 职场文书
pytorch损失反向传播后梯度为none的问题
2021/05/12 Python
Python实现机器学习算法的分类
2021/06/03 Python
MongoDB数据库的安装步骤
2021/06/18 MongoDB
Mysql多层子查询示例代码(收藏夹案例)
2022/03/31 MySQL
Python使用BeautifulSoup4修改网页内容
2022/05/20 Python