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定时执行计划任务的多种方法小结
Dec 19 PHP
解析Win7 XAMPP apache无法启动的问题
Jun 26 PHP
CI框架中cookie的操作方法分析
Dec 12 PHP
smarty模板引擎中自定义函数的方法
Jan 22 PHP
PHP中如何使用session实现保存用户登录信息
Oct 20 PHP
PHP中使用array函数新建一个数组
Nov 19 PHP
php实现图片上传并利用ImageMagick生成缩略图
Mar 14 PHP
PHP简单实现生成txt文件到指定目录的方法
Apr 25 PHP
如何正确配置Nginx + PHP
Jul 15 PHP
laravel 5.4中实现无限级分类的方法示例
Jul 27 PHP
Laravel中9个不经常用的小技巧汇总
Apr 16 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实现水仙花数的4个示例分享
2014/04/08 PHP
PHP命名空间(namespace)的使用基础及示例
2014/08/18 PHP
PHP实现广度优先搜索算法(BFS,Broad First Search)详解
2017/09/16 PHP
laravel 实现用户登录注销并限制功能
2019/10/24 PHP
Thinkphp5框架异常处理操作实例分析
2020/06/03 PHP
制作高质量的JQuery Plugin 插件的方法
2010/04/20 Javascript
根据IP的地址,区分不同的地区,查看不同的网站页面的js代码
2013/02/26 Javascript
JavaScript面向对象的实现方法小结
2015/04/14 Javascript
JQuery实现级联下拉框效果实例讲解
2015/09/17 Javascript
js+html制作简单日历的方法
2017/06/27 Javascript
在vue中添加Echarts图表的基本使用教程
2017/11/22 Javascript
vue实现点击关注后及时更新列表功能
2018/06/26 Javascript
详解解决小程序中webview页面多层history返回问题
2019/08/20 Javascript
JavaScript享元模式原理与用法实例详解
2020/03/09 Javascript
记一次用ts+vuecli4重构项目的实现
2020/05/21 Javascript
Python操作mysql数据库实现增删查改功能的方法
2018/01/15 Python
Python 实现在文件中的每一行添加一个逗号
2018/04/29 Python
对python3 一组数值的归一化处理方法详解
2018/07/11 Python
pygame游戏之旅 创建游戏窗口界面
2018/11/20 Python
详解django+django-celery+celery的整合实战
2019/03/19 Python
十个Python练手的实战项目,学会这些Python就基本没问题了(推荐)
2019/04/26 Python
python使用yield压平嵌套字典的超简单方法
2019/11/02 Python
windows上彻底删除jupyter notebook的实现
2020/04/13 Python
python opencv角点检测连线功能的实现代码
2020/11/24 Python
美国CVS药店官网:CVS Pharmacy
2018/07/26 全球购物
PHP如何去执行一个SQL语句
2016/03/05 面试题
承认错误的检讨书
2014/01/30 职场文书
公司离职证明标准样本
2014/10/05 职场文书
初中生思想道德自我评价
2015/03/09 职场文书
作息时间调整通知
2015/04/22 职场文书
孔子观后感
2015/06/08 职场文书
婚礼领导致辞大全
2015/07/28 职场文书
大学生党课感想
2015/08/11 职场文书
Django利用AJAX技术实现博文实时搜索
2021/05/06 Python
python pygame入门教程
2021/06/01 Python
「海贼王」112.9万粉丝纪念图标公布
2022/03/21 日漫