数字化技能提升教程,数字化时代生存宝典

数字化百科 / 词条 / ThinkPHP开发指南-模型-高级模型之多数据库连接和切换

ThinkPHP开发指南-模型-高级模型之多数据库连接和切换

查看全部词条命名空间:Main

导航:上一页

分布式数据库的配置信息是定义在配置文件里面的,所以一般情况下是无法更改的。另外使用分布式数据库有个不足,就是无法同时连接多个不同类型的数据库

  • 多数据库支持

如果你的应用需要在特殊的时候连接多个数据库,那么可以尝试使用ThinkPHP的多数据库连接特性:包括相同类型的数据库和不同类型的数据库。我们首先需要在模型类里面增加需要的数据库连接,例如:我们在UserModel类增加多个数据库连接,首先定义额外的数据库连接信息

PHP代码


$myConnect1 = array(

'dbms' => 'mysql',

'username' => 'username',

'password' => 'password',

'hostname' => 'localhost',

'hostport' => '3306',

'database' => 'dbname'

);

或者使用下面的定义

PHP代码


$myConnect1 = 'mysql://username:passwd@localhost:3306/DbName';

定义之后就可以进行动态的增加和切换数据库了。

PHP代码


$User = D("User");
// 增加数据库连接 第二个参数表示连接的序号

// 注意内置的数据库连接序号是0,所以额外的数据库连接序号应该从1开始

PHP代码


$User->addConnect($myConnect1,1); // 可以同时增加多个数据库连接 myConnect2和myConnect3的定义方式同

PHP代码


myConnect1

$User->addConnect($myConnect1,1);

$User->addConnect($myConnect2,2);

$User->addConnect($myConnect3,3);

这样在UserModel里面就同时存在了4个数据库(加上项目配置里面定义的)连接。那么我们如何使用这些不同的数据库连接呢?ThinkPHP采用了灵活的切换机制,由应用来控制不同的数据库连接。例如,我们需要在其中一个应用里面用到$myConnect2 这个数据库连接,那么用下面的方法切换即可:

PHP代码


$User->switchConnect(2);

switchConnect方法会智能识别该连接是否是相同类型的连接。如果要切换的数据表名称和当前模型的不一致,可以传入参数:

PHP代码


$User->switchConnect(2, 'Member');

这样连接新的数据库后切换到的数据表就成了member表了,当然前缀还是一样的。我们还可以使用addConnect方法添加多个动态数据库连接,只要传入数组参数就可以了,例如:

PHP代码


$myConnect[1] = 'mysql://username:passwd@192.168.1.1:3306/DbName1';

$myConnect[2] = 'mysqli://username:passwd@192.168.1.2:3306/DbName2';

$myConnect[3] = 'mysql://username:passwd@192.168.1.3:3306/DbName3';

$User->addConnect($myConnect);


如果需要删除之前动态添加的连接,可以使用delConnect方法,例如:

PHP代码


$User->delConnect(2); // 删除连接序号为2的数据库连接

可以在使用之后关闭添加的连接,可以使用closeConnect方法,例如:

PHP代码


$User->closeConnect(3); // 关闭连接序号为3的数据库连接

category:ThinkPHP