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动态生成虚拟现实VRML网页
Oct 09 PHP
亲密接触PHP之PHP语法学习笔记1
Dec 17 PHP
php表单敏感字符过滤类
Dec 08 PHP
PHP生成指定随机字符串的简单实现方法
Apr 01 PHP
WordPress中获取页面链接和标题的相关PHP函数用法解析
Dec 17 PHP
PHP基于DOMDocument解析和生成xml的方法分析
Jul 17 PHP
PHP自定义序列化接口Serializable用法分析
Dec 29 PHP
ThinkPHP框架实现的邮箱激活功能示例
Jun 15 PHP
ThinkPHP 3.2.3实现加减乘除图片验证码
Dec 05 PHP
Laravel框架实现多个视图共享相同数据的方法详解
Jul 09 PHP
使用laravel根据用户类型来显示或隐藏字段
Oct 17 PHP
PHP获取真实IP及IP模拟方法解析
Nov 24 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
做一个有下拉功能的留言版
2006/10/09 PHP
PHP循环获取GET和POST值的代码
2008/04/09 PHP
php mb_substr()函数截取中文字符串应用示例
2014/07/29 PHP
php操作mongoDB实例分析
2014/12/29 PHP
如何直接访问php实例对象中的private属性详解
2017/10/12 PHP
PHP基于redis计数器类定义与用法示例
2018/02/08 PHP
JQuery AJAX实现目录浏览与编辑的代码
2008/10/21 Javascript
JSON 编辑器实现代码
2009/12/06 Javascript
JavaScript高级程序设计(第3版)学习笔记13 ECMAScript5新特性
2012/10/11 Javascript
自己写了一个展开和收起的多更能型的js效果
2013/03/05 Javascript
简单的邮箱登陆的提示效果类似于yahoo邮箱
2014/02/26 Javascript
使用jquery制作弹出框效果
2015/04/03 Javascript
jQuery 生成svg矢量二维码
2016/08/09 Javascript
微信开发之调起摄像头、本地展示图片、上传下载图片实例
2016/12/08 Javascript
重学 JS:为啥 await 不能用在 forEach 中详解
2019/04/15 Javascript
layui表格 返回的数据状态异常的解决方法
2019/09/10 Javascript
vue+elementUI组件table实现前端分页功能
2020/11/15 Javascript
vue中使用vue-pdf的方法详解
2020/09/05 Javascript
Python实现将16进制字符串转化为ascii字符的方法分析
2017/07/21 Python
python网络爬虫之如何伪装逃过反爬虫程序的方法
2017/11/23 Python
Python处理命令行参数模块optpars用法实例分析
2018/05/31 Python
Python中常用的内置方法
2019/01/28 Python
雅诗兰黛加拿大官网:Estee Lauder加拿大
2019/07/31 全球购物
Quiksilver荷兰官方网站:冲浪和滑雪板
2019/11/16 全球购物
美发店5.1活动方案
2014/01/24 职场文书
安卓程序员求职信
2014/02/28 职场文书
勾股定理课后反思
2014/04/26 职场文书
优秀三好学生事迹材料
2014/08/31 职场文书
初级党校心得体会
2014/09/11 职场文书
平安家庭事迹材料
2014/12/20 职场文书
民事起诉书范本
2015/05/19 职场文书
《比尾巴》教学反思
2016/02/24 职场文书
2016年社区国庆节活动总结
2016/04/01 职场文书
Nginx设置日志打印post请求参数的方法
2021/03/31 Servers
html输入两个数实现加减乘除功能
2021/07/01 HTML / CSS
Go语言的协程上下文的几个方法和用法
2022/04/11 Golang