当前位置:首页 > CMS教程 > Thinkphp > 列表

thinkphp 框架数据库切换实现方法分析

发布:smiling 来源: PHP粉丝网  添加日期:2022-03-07 17:23:31 浏览: 评论:0 

本文实例讲述了thinkphp 框架数据库切换实现方法,分享给大家供大家参考,具体如下:

数据库配置:

  1. //数据库配置1 
  2. 'db_config1' => [ 
  3.   // 数据库类型 
  4.   'type'    => 'mysql'
  5.   // 服务器地址 
  6.   'hostname'  => '127.0.0.1'
  7.   // 数据库名 
  8.   'database'  => 'thinkphp'
  9.   // 数据库用户名 
  10.   'username'  => 'root'
  11.   // 数据库密码 
  12.   'password'  => ''
  13.   // 数据库编码默认采用utf8 
  14.   'charset'   => 'utf8'
  15.   // 数据库表前缀 
  16.   'prefix'   => 'think_'
  17. ], 
  18. //数据库配置2 
  19. 'db_config2' => 'mysql://root:1234@localhost:3306/thinkphp#utf8'
  20.  
  21. //默认数据库读取数据 
  22. $test = Db::name("test")->select(); 
  23. //第二个数据库读取数据 
  24. $test1=Db::connect("DB_Config_1")->name("test")->select(); 
  25. application/config.php 
  26.  
  27. $db1 = [  
  28. 'type'=>'mysql',  
  29. 'hostname'=>'127.0.0.1',  
  30. 'database'=>'testA',  
  31. 'username'=>'root',  
  32. 'password'=>'123456',  
  33. 'hostport'=>'3306',  
  34. 'params'=>[],  
  35. 'charset'=>'utf8',  
  36. 'prefix'=>'', ],  
  37. $db2 = [  
  38. 'type'=>'mysql',  
  39. 'hostname'=>'127.0.0.1',  
  40. atabase'=>'testB',  
  41. 'username'=>'root',  
  42. 'password'=>'123456',  
  43. 'hostport'=>'3306',  
  44. 'params'=>[],  
  45. 'charset'=>'utf8',  
  46. 'prefix'=>'', ],  
  47. Db::connect('db1')->query('select * from user where age=25'); 

方法配置

我们可以在调用Db类的时候动态定义连接信息,例如:

  1. Db::connect([ 
  2.   // 数据库类型 
  3.   'type'    => 'mysql'
  4.   // 数据库连接DSN配置 
  5.   'dsn'     => ''
  6.   // 服务器地址 
  7.   'hostname'  => '127.0.0.1'
  8.   // 数据库名 
  9.   'database'  => 'thinkphp'
  10.   // 数据库用户名 
  11.   'username'  => 'root'
  12.   // 数据库密码 
  13.   'password'  => ''
  14.   // 数据库连接端口 
  15.   'hostport'  => ''
  16.   // 数据库连接参数 
  17.   'params'   => [], 
  18.   // 数据库编码默认采用utf8 
  19.   'charset'   => 'utf8'
  20.   // 数据库表前缀 
  21.   'prefix'   => 'think_'
  22. ]); 

或者使用字符串方式:

Db::connect('mysql://root:1234@127.0.0.1:3306/thinkphp#utf8');

字符串连接的定义格式为:

数据库类型://用户名:密码@数据库地址:数据库端口/数据库名#字符集

注意:字符串方式可能无法定义某些参数,例如前缀和连接参数。

如果我们已经在应用配置文件(注意这里不是数据库配置文件)中配置了额外的数据库连接信息,例如:

  1. //数据库配置1 
  2. 'db_config1' => [ 
  3.   // 数据库类型 
  4.   'type'    => 'mysql'
  5.   // 服务器地址 
  6.   'hostname'  => '127.0.0.1'
  7.   // 数据库名 
  8.   'database'  => 'thinkphp'
  9.   // 数据库用户名 
  10.   'username'  => 'root'
  11.   // 数据库密码 
  12.   'password'  => ''
  13.   // 数据库编码默认采用utf8 
  14.   'charset'   => 'utf8'
  15.   // 数据库表前缀 
  16.   'prefix'   => 'think_'
  17. ], 
  18. //数据库配置2 
  19. '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语句:

  1. //模型查询 
  2. $user = new User(); 
  3. $result = $user->where('username'$data['username']) 
  4.         ->where('password'$data['password']) 
  5.         ->find(); 

或者

  1. User::where('id','1')->find(); 
  2. //普通结构查询 
  3. Db::table('think_user')->where('id',1)->find(); 

查询数据库2的信息时,调用普通查询语句:

  1. $list = Db::connect('db_con2'
  2. ->table('nrf_amf_reg_info'
  3. ->alias('r'
  4. ->join('nrf_amf_server s','r.Id = s.nrf_amf_reg_Id','LEFT'
  5. ->paginate(); 

或者:

$list = Db::connect('db_con2')->name('nrf_disc_record')->paginate();

注:nrf_amf_reg_info和nrf_disc_record为表名

Tags: thinkphp数据库切换

分享到: