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 相关文章推荐
在JavaScript中调用php程序
Mar 09 PHP
PHP的MVC模式实现原理分析(一相简单的MVC框架范例)
Apr 29 PHP
ThinkPHP行为扩展Behavior应用实例详解
Jul 22 PHP
PHP+jquery实时显示网站在线人数的方法
Jan 04 PHP
PHP定时执行任务的3种方法详解
Dec 21 PHP
php自定义函数实现汉字转换utf8编码的方法
Sep 29 PHP
PHP十六进制颜色随机生成器功能示例
Jul 24 PHP
tp5(thinkPHP5)框架连接数据库的方法示例
Dec 24 PHP
解决PHP curl或file_get_contents下载图片损坏或无法打开的问题
Oct 11 PHP
解决tp5在nginx下修改配置访问的问题
Oct 16 PHP
PHP pthreads v3使用中的一些坑和注意点分析
Feb 21 PHP
PHP新手指南
Apr 01 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
全国FM电台频率大全 - 2 天津市
2020/03/11 无线电
PHP 图片上传代码
2011/09/13 PHP
PHP中检索字符串的方法分析【strstr与substr_count方法】
2017/02/17 PHP
PHP二维关联数组的遍历方式(实例讲解)
2017/10/18 PHP
php-msf源码详解
2017/12/25 PHP
一文看懂PHP进程管理器php-fpm
2020/06/01 PHP
JS 常用校验函数
2009/03/26 Javascript
JQuery 插件制作实践 xMarquee插件V1.0
2010/04/02 Javascript
JavaScript中SQL语句的应用实现
2010/05/04 Javascript
javascript重写alert方法的实例代码
2013/03/29 Javascript
js弹出层(jQuery插件形式附带reLoad功能)
2013/04/12 Javascript
基于jquery实现发送文章到手机的代码
2014/12/26 Javascript
javascript创建动态表单的方法
2015/07/25 Javascript
深入理解JavaScript中的并行处理
2016/09/22 Javascript
JavaScript模板引擎Template.js使用详解
2016/12/15 Javascript
利用node.js实现自动生成前端项目组件的方法详解
2017/07/12 Javascript
layui中table表头样式修改方法
2018/08/15 Javascript
解决vue更新路由router-view复用组件内容不刷新的问题
2019/11/04 Javascript
ant-design-vue 快速避坑指南(推荐)
2020/01/21 Javascript
Vue.js中Line第三方登录api的实现代码
2020/06/29 Javascript
解决vue里a标签值解析变量,跳转页面,前面加默认域名端口的问题
2020/07/22 Javascript
[01:00:59]VP VS VG Supermajor小组赛胜者组第二轮 BO3第二场 6.2
2018/06/03 DOTA
[00:06]Yes,it worked!小卡尔成功穿越时空加入战场!
2019/07/20 DOTA
python中logging包的使用总结
2018/02/28 Python
对dataframe数据之间求补集的实例详解
2019/01/30 Python
使用python去除图片白色像素的实例
2019/12/12 Python
详解Python3 定义一个跨越多行的字符串的多种方法
2020/09/06 Python
高清安全摄像头系统:Lorex Technology
2018/07/20 全球购物
马来西亚户外装备商店:PTT Outdoor
2019/07/13 全球购物
英国最大的天然和有机产品在线零售商之一:Big Green Smile
2020/05/06 全球购物
社区交通安全实施方案
2014/03/22 职场文书
大学国际贸易专业自荐信
2014/06/05 职场文书
烟台的海导游词
2015/02/02 职场文书
党性教育心得体会(共6篇)
2016/01/21 职场文书
忆童年!用Python实现愤怒的小鸟游戏
2021/06/07 Python
纯CSS实现一个简单步骤条的示例代码
2022/07/15 HTML / CSS