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执行速度全攻略(下)
Oct 09 PHP
php Memcache 中实现消息队列
Nov 24 PHP
PHP IF ELSE简化/三元一次式的使用
Aug 22 PHP
php各种编码集详解和以及在什么情况下进行使用
Sep 11 PHP
解析php中curl_multi的应用
Jul 17 PHP
PHP实现WebService的简单示例和实现步骤
Mar 27 PHP
php-redis中的sort排序函数总结
Jul 08 PHP
php注册登录系统简化版
Dec 28 PHP
thinkPHP订单数字提醒功能的实现方法
Dec 01 PHP
PHP遍历目录文件的常用方法小结
Feb 03 PHP
PHP attributes()函数讲解
Feb 03 PHP
Yii2框架加载css和js文件的方法分析
May 25 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中__get()和__set()的用法实例详解
2013/06/04 PHP
ThinkPHP模板之变量输出、自定义函数与判断语句用法
2014/11/01 PHP
PHP实现数据库统计时间戳按天分组输出数据的方法
2017/10/10 PHP
对js关键字命名的疑问介绍
2014/04/25 Javascript
JavaScript实现的GBK、UTF8字符串实际长度计算函数
2014/08/27 Javascript
理解javascript回调函数
2014/12/28 Javascript
jQuery实现按键盘方向键翻页特效
2015/03/18 Javascript
酷! 不同风格页面布局幻灯片特效js实现
2021/02/19 Javascript
微信公众平台开发教程(五)详解自定义菜单
2016/12/02 Javascript
Vue-cli创建项目从单页面到多页面的方法
2017/09/20 Javascript
nodejs基于express实现文件上传的方法
2018/03/19 NodeJs
nodejs 十六进制字符串型数据与btye型数据相互转换
2018/07/30 NodeJs
vue中轮训器的使用
2019/01/27 Javascript
JS实现纵向轮播图(初级版)
2020/01/18 Javascript
[03:04]DOTA2英雄基础教程 影魔
2013/12/11 DOTA
[55:44]OG vs NAVI 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/17 DOTA
[06:45]DOTA2-DPC中国联赛 正赛 Magma vs LBZS 选手采访
2021/03/11 DOTA
Python面向对象之接口、抽象类与多态详解
2018/08/27 Python
使用Python爬虫库requests发送请求、传递URL参数、定制headers
2020/01/25 Python
Windows下PyCharm配置Anaconda环境(超详细教程)
2020/07/31 Python
详解Python高阶函数
2020/08/15 Python
详解Python中第三方库Faker
2020/09/25 Python
学点简单的Django之第一个Django程序的实现
2021/02/24 Python
基于css3 animate制作绚丽的动画效果
2015/11/24 HTML / CSS
鞋子女王塔玛拉·梅隆同名奢侈品牌:Tamara Mellon
2017/11/22 全球购物
学校后勤岗位职责
2014/02/19 职场文书
协议书样本
2014/04/23 职场文书
社区维稳工作方案
2014/06/06 职场文书
知识就是力量演讲稿
2014/09/13 职场文书
学校党的群众路线教育实践活动总结材料
2014/10/30 职场文书
离婚协议书怎么写的
2014/12/14 职场文书
大学生求职自荐信范文
2015/03/04 职场文书
好人好事新闻稿
2015/07/17 职场文书
Python 数据可视化之Matplotlib详解
2021/11/02 Python
go goth封装第三方认证库示例详解
2022/08/14 Golang
Golang Web 框架Iris安装部署
2022/08/14 Python