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 相关文章推荐
查找mysql字段中固定字符串并替换的几个方法
Sep 23 PHP
解析smarty 截取字符串函数 truncate的用法介绍
Jun 20 PHP
PHP使用imagick读取PDF生成png缩略图的两种方法
Mar 20 PHP
php switch语句多个值匹配同一代码块应用示例
Jul 29 PHP
PHP启动windows应用程序、执行bat批处理、执行cmd命令的方法(exec、system函数详解)
Oct 20 PHP
PHPExcel内存泄漏问题解决方法
Jan 23 PHP
Codeigniter校验ip地址的方法
Mar 21 PHP
PHP解密Unicode及Escape加密字符串
May 17 PHP
PHP多进程编程总结(推荐)
Jul 18 PHP
ThinkPHP5+UEditor图片上传到阿里云对象存储OSS功能示例
Aug 05 PHP
在Laravel 的 Blade 模版中实现定义变量
Oct 14 PHP
thinkphp5使html5实现动态跳转的例子
Oct 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原生模板引擎 最简单的模板引擎
2012/04/25 PHP
CSS+Jquery实现页面圆角框方法大全
2009/12/24 Javascript
jquery实现固定顶部导航效果(仿蘑菇街)
2013/03/21 Javascript
ext前台接收action传过来的json数据示例
2014/06/17 Javascript
jQuery中clearQueue()方法用法实例
2014/12/29 Javascript
JavaScript DOM进阶方法
2015/04/13 Javascript
js+css实现文字散开重组动画特效代码分享
2015/08/21 Javascript
JQuery实现级联下拉框效果实例讲解
2015/09/17 Javascript
js字符串截取函数slice、substring和substr的比较
2016/05/17 Javascript
js获取指定时间的前几秒
2017/04/05 Javascript
js脚本编写简单刷票投票系统
2017/06/27 Javascript
完美解决axios在ie下的兼容性问题
2018/03/05 Javascript
JS中使用cavas截图网页并解决跨域及模糊问题
2018/11/13 Javascript
jQuery实现条件搜索查询、实时取值及升降序排序的方法分析
2019/05/04 jQuery
js cavans实现静态滚动弹幕
2020/05/21 Javascript
解决antd 下拉框 input [defaultValue] 的值的问题
2020/10/31 Javascript
Python 创建空的list,以及append用法讲解
2018/05/04 Python
手把手教你使用Python创建微信机器人
2019/04/29 Python
python 数据提取及拆分的实现代码
2019/08/26 Python
python 下 CMake 安装配置 OPENCV 4.1.1的方法
2019/09/30 Python
pytorch:torch.mm()和torch.matmul()的使用
2019/12/27 Python
Python根据指定文件生成XML的方法
2020/06/29 Python
PyCharm+PyQt5+QtDesigner配置详解
2020/08/12 Python
Python爬虫代理池搭建的方法步骤
2020/09/28 Python
如何基于python实现年会抽奖工具
2020/10/20 Python
英国女士家居服网站:hush
2017/08/09 全球购物
Johnston & Murphy官网: 约翰斯顿·墨菲牛津总统鞋
2018/01/09 全球购物
俄罗斯女装店:12storeez
2019/10/25 全球购物
德国、奥地利和瑞士最大的旅行和度假门户网站:HolidayCheck
2019/11/14 全球购物
J2EE是技术还是平台还是框架
2016/08/14 面试题
团组织关系介绍信
2014/01/12 职场文书
政府班子四风问题整改措施
2014/10/04 职场文书
黄河绝恋观后感
2015/06/08 职场文书
婚礼领导致辞大全
2015/07/28 职场文书
高三数学复习备考教学反思
2016/02/18 职场文书
职场干货:简历中的自我评价应该这样写!
2019/05/06 职场文书