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 身份证号验证函数
May 07 PHP
PHP 数组教程 定义数组
Oct 23 PHP
PHP+jQuery实现自动补全功能源码
May 15 PHP
ThinkPHP的URL重写问题
Jun 22 PHP
php实现utf-8转unicode函数分享
Jan 06 PHP
php发送与接收流文件的方法
Feb 11 PHP
PHP中异常处理的一些方法整理
Jul 03 PHP
php实现复制移动文件的方法
Jul 29 PHP
PHP简单日历实现方法
Jul 20 PHP
PHP用FTP类上传文件视频等的简单实现方法
Sep 23 PHP
thinkPHP统计排行与分页显示功能示例
Dec 02 PHP
php封装单文件上传到数据库(路径)
Oct 15 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 array_push 数组函数
2009/12/26 PHP
php empty() 检查一个变量是否为空
2011/11/10 PHP
php计算十二星座的函数代码
2012/08/21 PHP
thinkphp自定义权限管理之名称判断方法
2017/04/01 PHP
ExtJs事件机制基本代码模型和流程解析
2010/10/24 Javascript
jquery遍历checkbox的注意事项说明
2014/02/21 Javascript
NodeJS学习笔记之Http模块
2015/01/13 NodeJs
JavaScript创建对象的方式小结(4种方式)
2015/12/17 Javascript
js修改onclick动作的四种方法(推荐)
2016/08/18 Javascript
jQuery中delegate()方法的用法详解
2016/10/13 Javascript
React全家桶环境搭建过程详解
2018/05/18 Javascript
Vue.js组件间通信方式总结【推荐】
2018/11/23 Javascript
微信小程序实现获取准确的腾讯定位地址功能示例
2019/03/27 Javascript
Vue表单绑定的实例代码(单选按钮,选择框(单选时,多选时,用 v-for 渲染的动态选项)
2019/05/13 Javascript
详解Vue后台管理系统开发日常总结(组件PageHeader)
2019/11/01 Javascript
node.js中npm包管理工具用法分析
2020/02/14 Javascript
js实现鼠标切换图片(无定时器)
2021/01/27 Javascript
在Python下进行UDP网络编程的教程
2015/04/29 Python
Django自定义分页与bootstrap分页结合
2021/02/22 Python
详解appium+python 启动一个app步骤
2017/12/20 Python
python+selenium识别验证码并登录的示例代码
2017/12/21 Python
一行代码让 Python 的运行速度提高100倍
2018/10/08 Python
Django使用paginator插件实现翻页功能的实例
2018/10/24 Python
浅谈python 读excel数值为浮点型的问题
2018/12/25 Python
pygame库实现俄罗斯方块小游戏
2019/10/29 Python
Python3.7安装pyaudio教程解析
2020/07/24 Python
如何解决flask修改静态资源后缓存文件不能及时更改问题
2020/08/02 Python
菲律宾最大的网上花店和礼品店:PhilFlower.com
2018/02/09 全球购物
拓展培训心得体会
2014/01/04 职场文书
2014年应急管理工作总结
2014/11/26 职场文书
酒会邀请函
2015/01/31 职场文书
小学教师工作总结2015
2015/04/07 职场文书
Python实现Telnet自动连接检测密码的示例
2021/04/16 Python
python自动化操作之动态验证码、滑动验证码的降噪和识别
2021/08/30 Python
SpringBoot系列之MongoDB Aggregations用法详解
2022/02/12 MongoDB
Python实现聚类K-means算法详解
2022/07/15 Python