2011-10-01 150 views
1

我在Codeigniter有多个数据库连接有问题。在我的database.php我配置了两个数据库。Codeigniter - 多个数据库连接

$active_group = 'cms'; 
$active_record = FALSE; 
    $db['cms']['hostname'] = 'localhost'; 
    $db['cms']['username'] = 'yoloo_cms'; 
    $db['cms']['password'] = 'password'; 
    $db['cms']['database'] = 'yoloo_cms'; 
    $db['cms']['dbdriver'] = 'mysql'; 
    $db['cms']['dbprefix'] = ''; 
    $db['cms']['pconnect'] = TRUE; 
    $db['cms']['db_debug'] = TRUE; 
    $db['cms']['cache_on'] = FALSE; 
    $db['cms']['cachedir'] = ''; 
    $db['cms']['char_set'] = 'utf8'; 
    $db['cms']['dbcollat'] = 'utf8_general_ci'; 
    $db['cms']['swap_pre'] = ''; 
    $db['cms']['autoinit'] = TRUE; 
    $db['cms']['stricton'] = FALSE; 

    $db['hazeleger']['hostname'] = 'localhost'; 
    $db['hazeleger']['username'] = 'yoloo_websites'; 
    $db['hazeleger']['password'] = 'password2'; 
    $db['hazeleger']['database'] = 'yoloo_hazeleger'; 
    $db['hazeleger']['dbdriver'] = 'mysql'; 
    $db['hazeleger']['dbprefix'] = ''; 
    $db['hazeleger']['pconnect'] = TRUE; 
    $db['hazeleger']['db_debug'] = TRUE; 
    $db['hazeleger']['cache_on'] = FALSE; 
    $db['hazeleger']['cachedir'] = ''; 
    $db['hazeleger']['char_set'] = 'utf8'; 
    $db['hazeleger']['dbcollat'] = 'utf8_general_ci'; 
    $db['hazeleger']['swap_pre'] = ''; 
    $db['hazeleger']['autoinit'] = TRUE; 
    $db['hazeleger']['stricton'] = FALSE; 

在我的模型我用这个当我要连接到其他数据库比通常一个:

function __construct() 
{ 
    parent::__construct(); 
    $this->load->database('hazeleger',TRUE); 
} 

但在所有的时间笨连接到CMS。当我删除

$active_group = 'cms'; 
$active_record = FALSE; 

Codeingiter出现错误。当我试过这个

function __construct() 
{ 
    parent::__construct(); 
    $db2 = $this->load->database('hazeleger',TRUE); 
} 

function test() 
{ 
     $query = "SELECT * FROM cms_modules"; 
     $result = $db2->db->query($query); 
     return $db2->result(); 
} 

它给出了一个错误。 Variabele db2不存在。 我只想在每个模型上选择我想连接的数据库。 但是没有工作。有人知道,我如何在模型上使用不同的数据库 。

非常感谢!

回答

5

您必须将变量$ db2另存为类字段。您可以访问$ this-> db2 ...

+0

它的作品!非常感谢你! – JelleP

+0

没问题(:如果你想要你可以标记我的答案为“正确”。 – MasterCassim

1

发生这种情况是因为您最有可能在/application/config/autoload.php 中设置了自动加载/创建数据库库。

打开autoload.php,并寻找这一行:从阵列

$autoload['libraries'] = array('database'); 

删除 '数据库',然后保存。现在它应该按照预期在您的控制器中工作。

+0

它的工作原理!!非常感谢! – JelleP

+0

没问题。但现在哪一个是正确的? – CarstenSchmitz

+1

@JelleP:我认为你应该开始[接受答案](http://meta.stackexchange.com/q/5234/147909)。这将有助于使这个网站的工作;)谢谢! – hakre

1

为今后旅客参考,负载将沿着这些路线:

$this->db2 = $this->load->database('hazeleger',true); 
1

你必须改变DB2类

$query = "SELECT * FROM cms_modules"; 
    $result = $this->db2->query($query); 
    return result();