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中session使用示例
Mar 29 PHP
php构造函数的继承方法
Feb 09 PHP
php判断输入是否是纯数字,英文,汉字的方法
Mar 05 PHP
使用ltrace工具跟踪PHP库函数调用的方法
Apr 25 PHP
Thinkphp 中 distinct 的用法解析
Dec 14 PHP
PHP仿qq空间或朋友圈发布动态、评论动态、回复评论、删除动态或评论的功能(上)
May 26 PHP
PHP实现UTF8二进制及明文字符串的转化功能示例
Nov 20 PHP
php+redis消息队列实现抢购功能
Feb 08 PHP
用Laravel Sms实现laravel短信验证码的发送的实现
Nov 29 PHP
PHP crypt()函数的用法讲解
Feb 15 PHP
PHP7实现和CryptoJS的AES加密方式互通示例【AES-128-ECB加密】
Jun 08 PHP
PHP7创建COOKIE和销毁COOKIE的实例方法
Feb 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中的unset究竟会不会释放内存
2013/07/18 PHP
PHP获取网页标题的3种实现方法代码实例
2014/04/11 PHP
简单分析ucenter 会员同步登录通信原理
2014/08/25 PHP
PHP中mysqli_get_server_version()的实例用法
2020/02/03 PHP
记录几个javascript有关的小细节
2007/04/02 Javascript
JavaScript去掉空格的方法集合
2010/12/28 Javascript
JQuery中的$.getJSON 使用说明
2011/03/10 Javascript
JavaScript实现页面实时显示当前时间的简单实例
2013/07/20 Javascript
jQuery实现图片放大预览实现原理及代码
2013/09/12 Javascript
jQuery实现的导航条切换可显示隐藏
2014/10/22 Javascript
jQuery读取XML文件内容的方法
2015/03/09 Javascript
JavaScript将字符串转换为整数的方法
2015/04/14 Javascript
理解javascript中的原型和原型链
2015/07/30 Javascript
JavaScript脚本判断蜘蛛来源的方法
2015/09/22 Javascript
基于JavaScript实现Json数据根据某个字段进行排序
2015/11/24 Javascript
js Canvas绘制圆形时钟教程
2017/02/06 Javascript
JavaScript 保护变量不被随意修改的实现代码
2017/09/27 Javascript
使用vue-router为每个路由配置各自的title
2018/07/30 Javascript
总结javascript三元运算符知识点
2018/09/28 Javascript
Python 装饰器深入理解
2017/03/16 Python
利用Python批量提取Win10锁屏壁纸实战教程
2018/03/27 Python
Python带动态参数功能的sqlite工具类
2018/05/26 Python
使用Django启动命令行及执行脚本的方法
2018/05/29 Python
Python+OpenCV图片局部区域像素值处理改进版详解
2019/01/23 Python
django admin后台添加导出excel功能示例代码
2019/05/15 Python
如何用OpenCV -python3实现视频物体追踪
2019/12/04 Python
python3利用Axes3D库画3D模型图
2020/03/25 Python
安装多个版本的TensorFlow的方法步骤
2020/04/21 Python
CSS3 实现倒计时效果
2020/11/25 HTML / CSS
MIKI HOUSE美国官方网上商店:日本领先的婴儿和儿童高级时装品牌
2020/06/21 全球购物
房地产销售计划书
2014/01/10 职场文书
中级会计大学生职业生涯规划书
2014/09/16 职场文书
小学工作总结2015
2015/05/04 职场文书
关于运动会的宣传稿
2015/07/23 职场文书
小组口号霸气押韵
2015/12/24 职场文书
SSM VUE Axios详解
2021/10/05 Vue.js