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 pack与unpack 摸板字符字符含义
Oct 29 PHP
php mysql 判断update之后是否更新了的方法
Jan 10 PHP
PHP重定向的3种方式
Mar 07 PHP
CentOS 6.2使用yum安装LAMP以及phpMyadmin详解
Jun 17 PHP
php/js获取客户端mac地址的实现代码
Jul 08 PHP
phpQuery占用内存过多的处理方法
Nov 13 PHP
网页上facebook分享功能具体实现
Jan 26 PHP
ThinkPHP3.2.3框架实现的空模块、空控制器、空操作,跳转到错误404页面图文详解
Apr 03 PHP
PHP7 mongoDB扩展使用的方法分享
May 02 PHP
PHP 7.4 新语法之箭头函数实例详解
May 09 PHP
ThinkPHP5.1框架数据库链接和增删改查操作示例
Aug 03 PHP
深入学习微信网址链接解封的防封原理visit_type
Aug 15 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
3种平台下安装php4经验点滴
2006/10/09 PHP
PHP 数组教程 定义数组
2009/10/23 PHP
php中通过curl检测页面是否被百度收录
2013/09/27 PHP
php教程之魔术方法的使用示例(php魔术函数)
2014/02/12 PHP
php实现按指定大小等比缩放生成上传图片缩略图的方法
2014/12/15 PHP
PHP大文件切割上传并带进度条功能示例
2019/07/01 PHP
php加速缓存器opcache,apc,xcache,eAccelerator原理与配置方法实例分析
2020/03/02 PHP
jQuery Flash/MP3/Video多媒体插件
2010/01/18 Javascript
让html页面不缓存js的实现方法
2014/10/31 Javascript
浅谈JavaScript超时调用和间歇调用
2015/08/30 Javascript
AngularJS 中文API参考手册
2016/07/28 Javascript
ReactNative-JS 调用原生方法实例代码
2016/10/08 Javascript
NPM 安装cordova时警告:npm WARN deprecated minimatch@2.0.10: Please update to minimatch 3.0.2 or higher to
2016/12/20 Javascript
JavaScript使用ul中li标签实现删除效果
2019/04/15 Javascript
利用layer实现表单完美验证的方法
2019/09/26 Javascript
微信小程序实现侧边栏分类
2019/10/21 Javascript
Vue props中Object和Array设置默认值操作
2020/07/30 Javascript
[38:38]完美世界DOTA2联赛PWL S3 access vs Rebirth 第二场 12.17
2020/12/18 DOTA
跟老齐学Python之print详解
2014/09/28 Python
Python中使用Beautiful Soup库的超详细教程
2015/04/30 Python
一个基于flask的web应用诞生 用户注册功能开发(5)
2017/04/11 Python
python保存数据到本地文件的方法
2018/06/23 Python
Python全局变量与局部变量区别及用法分析
2018/09/03 Python
Python中format()格式输出全解
2019/04/12 Python
如何在python中写hive脚本
2019/11/08 Python
python实现图像外边界跟踪操作
2020/07/13 Python
Django生成数据库及添加用户报错解决方案
2020/10/09 Python
canvas实现滑动验证的实现示例
2020/08/11 HTML / CSS
介绍一下木马病毒的种类
2015/07/26 面试题
恶搞卫生巾广告词
2014/03/18 职场文书
我是一名护士演讲稿
2014/08/28 职场文书
学校查摆问题整改措施
2014/09/28 职场文书
2016年乡镇七一建党节活动总结
2016/04/05 职场文书
HTML基础-标签分类(闭合标签,空标签,块级元素,行内元素,行级块元素,可替换元素)
2021/03/31 HTML / CSS
pyqt5打包成exe可执行文件的方法
2021/05/14 Python
python爬取某网站原图作为壁纸
2021/06/02 Python