首页 > 开发 > PHP > 正文

ThinkPHP实现多数据库连接的解决方法

2024-05-04 22:20:04
字体:
来源:转载
供稿:网友

ThinkPHP实现连接多个数据的时候,如果数据库在同一个服务器里的话只需要这样定义模型:

class MembersModel extends Model{protected $trueTableName = 'members.members'; //数据库名.表名(包含了前缀)}

然后就可以像D("Members");这样实例化模型,像普通模型那样操作了。
但后来发现他的数据库在两个不同的服务器,这样上面的方法就不行了。
这时候就需要使用TP的多数据连接特性了。

对此,查阅官方文档进行测试并修正之后得出了如下的解决方法:

要建立多数据连接,首先要构造数据库配置参数。但是如果每次都在建立多数据库连接的时候都建立数据库配置数组,这样就会很麻烦,还不如写在配置文件里。这里怎么写还是需要有点技巧的。

<?php$config= array('DEBUG_MODE'=>true,'default_module'=>'Index','ROUTER_ON'=>TRUE,'DATA_RESULT_TYPE'=>1,'SHOW_RUN_TIME'=>true,   // 运行时间显示'SHOW_ADV_TIME'=>true,   // 显示详细的运行时间'SHOW_DB_TIMES'=>true,   // 显示数据库查询和写入次数'SHOW_CACHE_TIMES'=>true,  // 显示缓存操作次数'SHOW_USE_MEM'=>true,   // 显示内存开销'HTML_FILE_SUFFIX'=>'.shtml',  // 默认静态文件后缀'HTML_CACHE_ON' =>false,   // 默认关闭静态缓存'HTML_CACHE_TIME'=>60,   // 静态缓存有效期'HTML_READ_TYPE'=>1,   // 静态缓存读取方式 0 readfile 1 redirect'HTML_URL_SUFFIX'=>'.shtml', // 伪静态后缀设置//默认数据库链接'DB_TYPE'=>'mysql','DB_HOST'=>'localhost','DB_NAME'=>'news','DB_USER'=>'root','DB_PWD'=>'123','DB_PORT'=>'3306','DB_PREFIX'=>'news_',//我的第一个数据库连接'DB_BBS'=>array('dbms' => 'mysql','username' => 'discuz','password' => '123','hostname' => 'localhost','hostport' => '3306','database' => 'discuz'),//第二个数据库链接,'DB_NEWS'=>array('dbms'=>'mysql','username'=>'root','password'=>'123','hostname'=>'localhost','hostport'=>'3306','database'=>'news'));return $config;?>

至此我们就可以用C("DB_BBS")和C("DB_NEWS")来得到数据库的配置数组。
配置好了,现在需要实例化模型。因为我们这个模型需使用两个不同的数据库的连接,项目的配置文件里默认了个数据库配置,如果你建立了某个表的模型比如UserModel.class.php,
如果你用D("User");但假如当前默认的数据库里没User个表的话就会报错。所以我们要建立个空模型。空模型是不会选表的。
有两种方法建立空模型。$dao=D();和$dao=new Model();都可以。

$dao=D();

实例化模型后,我们需要增加数据库模型;

$dao->addConnect(C("DB_BBS"),1,true);$dao->addConnect(C("DB_NEWS"),2,true);
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表