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 win下Socket方式发邮件类
Aug 21 PHP
PHP操作文件类的函数代码(文件和文件夹创建,复制,移动和删除)
Nov 10 PHP
PHP函数eval()介绍和使用示例
Aug 20 PHP
php中字符串和正则表达式详解
Oct 23 PHP
php微信开发之百度天气预报
Nov 18 PHP
php数据库的增删改查 php与javascript之间的交互
Aug 31 PHP
thinkPHP5项目中实现QQ第三方登录功能
Oct 20 PHP
php微信公众号开发之校园图书馆
Oct 20 PHP
PHP封装的page分页类定义与用法完整示例
Dec 24 PHP
详解php中curl返回false的解决办法
Mar 18 PHP
PHP应用跨时区功能的实现方法
Mar 21 PHP
PHP实现时间日期友好显示实现代码
Sep 08 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 mssql 数据库分页SQL语句
2008/12/16 PHP
PHP把空格、换行符、中文逗号等替换成英文逗号的正则表达式
2014/05/04 PHP
深入理解JavaScript系列(14) 作用域链介绍(Scope Chain)
2012/04/12 Javascript
node.js使用require()函数加载模块
2014/11/26 Javascript
JS组件Bootstrap Table使用方法详解
2016/02/02 Javascript
详解JavaScript中的自定义事件编写
2016/05/10 Javascript
Vue.js实现一个自定义分页组件vue-paginaiton
2016/09/05 Javascript
discuz表情的JS提取方法分析
2017/03/22 Javascript
详解Angular Reactive Form 表单验证
2017/07/06 Javascript
详解VueJS应用中管理用户权限
2018/02/02 Javascript
jQuery niceScroll滚动条错位问题的解决方法
2018/02/03 jQuery
几个你不知道的技巧助你写出更优雅的vue.js代码
2018/06/11 Javascript
详解angularjs4部署文件过大解决过程
2018/12/05 Javascript
js针对图片加载失败的处理方法分析
2019/08/24 Javascript
javascript实现简单打字游戏
2019/10/29 Javascript
python 解析XML python模块xml.dom解析xml实例代码
2014/02/07 Python
深入剖析Python的爬虫框架Scrapy的结构与运作流程
2016/01/20 Python
Python中的 is 和 == 以及字符串驻留机制详解
2019/06/28 Python
wxPython实现文本框基础组件
2019/11/18 Python
最简单的matplotlib安装教程(小白)
2020/07/28 Python
python实现在列表中查找某个元素的下标示例
2020/11/16 Python
python录音并调用百度语音识别接口的示例
2020/12/01 Python
如何利用Python matplotlib绘制雷达图
2020/12/21 Python
CSS3过渡transition效果实例介绍
2016/05/03 HTML / CSS
浅析css3中matrix函数的使用
2016/06/06 HTML / CSS
HTML5的结构和语义(4):语义性的内联元素
2008/10/17 HTML / CSS
HTML5+CSS3模仿优酷视频截图功能示例
2017/01/05 HTML / CSS
Cult Gaia官网:美国生活方式品牌
2019/08/16 全球购物
电子商务毕业生求职信
2013/11/10 职场文书
物流管理毕业生自荐信范文
2014/03/15 职场文书
本科毕业生应聘自荐信范文
2014/06/26 职场文书
我的中国梦演讲稿高中篇
2014/08/19 职场文书
绿色校园广播稿
2014/10/13 职场文书
甜美蛋糕店的创业计划书模板,拿来即用!
2019/08/21 职场文书
vue.js 使用原生js实现轮播图
2022/04/26 Vue.js
vue使用element-ui按需引入
2022/05/20 Vue.js