CI 与不同服务器的多个数据库连接

Posted

技术标签:

【中文标题】CI 与不同服务器的多个数据库连接【英文标题】:CI multiple database connection with different server 【发布时间】:2013-02-14 08:38:46 【问题描述】:

我有一个应用程序需要连接到 2 个不同的数据库和不同的服务器。除了在 database.php 中进行之外,我还需要做其他设置吗?我在我的代码中写了这个来连接到两个数据库:

$provinsi_db = $this->load->database('provinsi', true); //this is from another server
$local = $this->load->database('default', true); //this one is in my localhost

但是当我尝试从服务器数据库中选择数据时,什么都没有发生..从本地数据库中选择数据没有问题..有人可以帮我吗?

这是我的database.php:

$active_group = 'default';
$active_record = TRUE;

$db['default']['hostname'] = 'localhost';
$db['default']['username'] = 'username_local';
$db['default']['password'] = 'password_local';
$db['default']['database'] = 'db_local';
$db['default']['dbdriver'] = 'mysql';
$db['default']['dbprefix'] = '';
$db['default']['pconnect'] = TRUE;
$db['default']['db_debug'] = TRUE;
$db['default']['cache_on'] = FALSE;
$db['default']['cachedir'] = '';
$db['default']['char_set'] = 'utf8';
$db['default']['dbcollat'] = 'utf8_general_ci';
$db['default']['swap_pre'] = '';
$db['default']['autoinit'] = TRUE;
$db['default']['stricton'] = FALSE;

$db['provinsi']['hostname'] = 'xxx.xxx.xxx.xxx';
$db['provinsi']['username'] = 'username_foreign';
$db['provinsi']['password'] = 'password_foreign';
$db['provinsi']['database'] = 'db_foreign';
$db['provinsi']['dbdriver'] = 'mysql';
$db['provinsi']['dbprefix'] = '';
$db['provinsi']['pconnect'] = TRUE;
$db['provinsi']['db_debug'] = TRUE;
$db['provinsi']['cache_on'] = FALSE;
$db['provinsi']['cachedir'] = '';
$db['provinsi']['char_set'] = 'utf8';
$db['provinsi']['dbcollat'] = 'utf8_general_ci';
$db['provinsi']['swap_pre'] = '';
$db['provinsi']['autoinit'] = TRUE;
$db['provinsi']['stricton'] = FALSE;

我必须在服务器的“主机名”中包含端口吗?

【问题讨论】:

您是否在database.php 中为db 设置了两个配置?你能告诉我们你的database.php吗? 是的,我有,我现在刚刚包含它.. 我不认为它有什么问题。 【参考方案1】:

我的整个数据库设置示例

//我的数据库.php

/* API Database Connection */

$active_group = 'apidb';
$active_record = TRUE;

$db['apidb']['hostname'] = 'localhost';
$db['apidb']['username'] = 'user_name';
$db['apidb']['password'] = 'pass_word';
$db['apidb']['database'] = 'db_name';
$db['apidb']['dbdriver'] = 'mysql';
$db['apidb']['dbprefix'] = '';
$db['apidb']['pconnect'] = FALSE;
$db['apidb']['db_debug'] = TRUE;
$db['apidb']['cache_on'] = FALSE;
$db['apidb']['cachedir'] = '';
$db['apidb']['char_set'] = 'utf8';
$db['apidb']['dbcollat'] = 'utf8_general_ci';
$db['apidb']['swap_pre'] = '';
$db['apidb']['autoinit'] = TRUE;
$db['apidb']['stricton'] = FALSE;


/* Site Database Connection */

$active_group = 'sitedb';
$active_record = TRUE;

$db['sitedb']['hostname'] = 'localhost';
$db['sitedb']['username'] = 'user_name';
$db['sitedb']['password'] = 'pass_word';
$db['sitedb']['database'] = 'db_name';
$db['sitedb']['dbdriver'] = 'mysql';
$db['sitedb']['dbprefix'] = '';
$db['sitedb']['pconnect'] = FALSE;
$db['sitedb']['db_debug'] = TRUE;
$db['sitedb']['cache_on'] = FALSE;
$db['sitedb']['cachedir'] = '';
$db['sitedb']['char_set'] = 'utf8';
$db['sitedb']['dbcollat'] = 'utf8_general_ci';
$db['sitedb']['swap_pre'] = '';
$db['sitedb']['autoinit'] = TRUE;
$db['sitedb']['stricton'] = FALSE;

在控制器中,加载数据库

$this->sitedb = $this->load->database('sitedb', TRUE);
$this->apidb = $this->load->database('apidb', TRUE);

在模型中,你可以调用

$this->apidb->query('your query');

$this->sitedb->query('your query');

【讨论】:

它有效!谢谢。我实际上是 php 和 CI 的新手,非常感谢你:) 我也遇到了两个数据库的示例问题,如果每个数据库都在同一个服务器主机上它工作正常,但每个不同它都不起作用【参考方案2】:

尝试在您的配置 database.php 中更改它

$db['provinsi']['pconnect'] = FALSE;

$db['default']['pconnect'] = FALSE;

【讨论】:

我试过了,但还是不行..我不知道怎么回事

以上是关于CI 与不同服务器的多个数据库连接的主要内容,如果未能解决你的问题,请参考以下文章

netty中一个客户端可以连接(监听)多个服务端并且可以正常发送给不同服务端数据以及接受服务端的数据?

CI 更新批次;连接和递增变量和字符串作为数组值

c#程序中,一个程序需要连接多个不同数据库。连接语言应该怎样书写?

多个并行tcp连接

如何使用 Laravel Eloquent 在不同服务器上的多个数据库之间执行连接查询?

Loopback + 连接多个数据库