用ThinkPHP多数据库连接的解决方案
当thinkphp实现多个数据连接,如果数据库在同一台服务器,它只需要定义模型。类membersmodel延伸模型{
保护truetablename = Members'美元。成员; / /数据库名称。表的名称(包括前缀)
}
然后它可以像D(成员);这实例化模型,像一个普通的模型。
但是后来发现他的数据库在两个不同的服务器中,所以上述方法是不可能的。
这一次,您需要使用TP的多数据连接特性。
在这方面,经过对官方文件的测试和修正,获得了以下解决方案:
要构建多个数据连接,首先应该构造数据库配置参数。但是,如果每次设置多数据库连接时设置数据库配置数组,那么在配置文件中编写它就麻烦多了。
< PHP
数组(
debug_mode= >真的,
default_module= > 'index,
router_on= >真的,
data_result_type= > 1,
show_run_time= >真 / /运行时间显示
show_adv_time= >真 /显示详细的运行时间
show_db_times= >真 / /显示数据库查询和写入数
show_cache_times= >真 / /显示缓冲区的操作次数
show_use_mem= >真 / /显示内存开销
html_file_suffix= >。shtml / /默认静态文件后缀
html_cache_on= >假 / /默认静态缓存
html_cache_time= > 60 / /静态缓存是有效的
html_read_type= > 1,静态缓存0 ReadFile / 1重定向
html_url_suffix= >。shtml / /设置伪静态后缀
默认数据库链接
db_type= > 'mysql,
db_host= > 'localhost,
db_name= >新闻,
db_user= > 'root,
db_pwd= > '123,
db_port= > '3306,
db_prefix= > 'news_,
第一个数据库连接
db_bbs= >阵列(
数据库= > 'mysql,
用户名= > 'discuz,
密码= > '123,
主机名= > 'localhost,
hostport= > '3306,
'数据库' = > 'discuz
),
第二个数据库链接,
db_news= >阵列(
数据库= > 'mysql,
用户名= > 'root,
密码= > '123,
主机名= > 'localhost,
hostport= > '3306,
'数据库' = >新闻
)
);
返回的配置;
>
在这一点上我们可以用C(db_bbs )和C(db_news )获取数据库配置阵列。
配置良好,现在需要实例化模型。因为我们的模型需要两个不同的数据库连接。项目的配置文件的默认数据库配置。如果你建立了一个表的模型,如UserModel.class.php,
如果你使用D(用户),但是如果当前的默认数据库中没有用户表,它将被报告错误,所以我们要建立一个空模型,没有选择空模型。
建立空模型的方法有两种。
$ = d();
实例化后的模型,我们需要添加的数据库模型。
$道-> addconnect(C(db_bbs ),1,真的);
$道-> addconnect(C(db_news ),2,真的);
说这addconnect();这个函数的原型是不同的从1.0.3、1.0.4。
1.0.3原型:
布尔addconnect(混合配置混合linknum美元,美元,美元eqtype =真} {布尔)
在1.0.4原型:
布尔addconnect(混合配置混合linknum美元,美元)
缺少第三个参数。
第一个参数是数据库的配置数组。第二个参数是要添加的连接的数量。当数据库连接被切换时,需要给出该序列号的连接。请注意,内置数据库连接序列号是0,因此额外的数据库连接序列号应该从1开始。第三个参数是两个数据库是否是相同的连接,这是真的。
添加数据库连接后,你可以在任何时候切换数据库连接。例如,我们要用db_news数据库。
美元switchconnect道>>(2);
因为这只是连接到数据库,没有表选择,所以您需要选择下一个表。
注意,这里的表的名称是全名,也就是表的前缀和表名。因为我们在连接数据库的配置数组中没有前缀。我认为应该定义它,但我不知道。
$道->表格(cdb_members );
然后你可以像普通的模型那样使用这个模型。
例如,我想查询通过的ID用户的所有信息:
$地图=阵列(ID= > $ _get {ID));
$ $ = DAO -查找($ map);
您可以看到查询是否成功。
倾销(美元);
如果你想使用db_bbs数据库表了,你只需要切换一个连接。
美元switchconnect道>>(2);
然后选择查询表。记住,切换模型必须选择一个表,否则会出错。
然后可以像普通模型一样运行。
手册中指出了以下问题。
1。当实例化多数据库连接时,建立一个非空模型(这似乎是错误的)。这可能会出错。建议建立一个空模型。
2.addconnect()的参数在不同版本的不同,它们不是写在手册。
三.设置了一个空模型后,需要选择一个不在本手册中的表。
对于以上几点,ThinkPHP用户可以进行相应的调整,根据不同的版本。