database.php中:
$db['default']['hostname'] = "192.168.2.104";
$db['default']['username'] = "webuser";
$db['default']['password'] = "----";
$db['default']['database'] = "vad";
$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['stats']['hostname'] = "192.168.2.104";
$db['stats']['username'] = "webuser";
$db['stats']['password'] = "---";
$db['stats']['database'] = "vad_stats";
$db['stats']['dbdriver'] = "mysql";
$db['stats']['dbprefix'] = "";
$db['stats']['pconnect'] = TRUE;
$db['stats']['db_debug'] = TRUE;
$db['stats']['cache_on'] = FALSE;
$db['stats']['cachedir'] = "";
$db['stats']['char_set'] = "utf8";
$db['stats']['dbcollat'] = "utf8_general_ci";
问题是我只能在配置中定义一个
$active_group
,默认或统计信息。我按照CodeIgniter文档进行了操作,并添加了以下内容:
$DB2 = $this->load->database('stats', TRUE);
这样我连接到第二个数据库,但是我失去了与第一个数据库的连接。有没有人对如何加载这两个数据库有任何想法,而不必在所有模型构造函数中执行以下操作?
$database1 = $this->load->database('database1', TRUE);
$database2 = $this->load->database('database2', TRUE);
此致
佩德罗
答案 0 :(得分:29)
codeigniter中存在错误。在一个类中插入一行将解决整个问题。以下是原始来源:http://koorb.wordpress.com/2007/11/16/codeigniter-connect-to-multiple-databases/
**此修复程序不适用于PostgreSQL
这是一个副本,以防网站出现故障。
行号已更改。以下是codeigniter的错误修复:
开始修复错误描述
所有数据库调用都转到同一个数据库(最后一次初始化)
要解决此问题,请更改/system/database/DB_driver.php中的simple_query函数:
function simple_query($sql)
{
if ( ! $this->conn_id)
{
$this->initialize();
}
$this->db_select(); //<----------------- Added this line
return $this->_execute($sql);
}
这完全解决了这个问题,所以你可以在模型中做这样的事情
$this->legacy_db = $this->load->database('legacy', true);
答案 1 :(得分:24)
除了应用Camacho提到的hack之外,您还可以将database.php文件中的'pconnect'-flag设置为FALSE以用于所有连接。
答案 2 :(得分:5)
目前,codeigniter无法连接到持久连接中的多个数据库。 所以,你应该转变你的连接的持久性。 你可能会这样做..
$db['default']['pconnect'] = FALSE;
$db['stats']['pconnect'] = FALSE;
答案 3 :(得分:4)
我修复了更改框架上DB_driver.php的问题。
在此功能中,我添加了$this->db_select();
,在使用2个数据库时,您再也不会丢失连接。
function simple_query($sql)
{
if ( ! $this->conn_id)
{
$this->initialize();
}
$this->db_select();
return $this->_execute($sql);
}
答案 4 :(得分:3)
您可以尝试修改session.php文件中的函数CI_Session()。
替换
$this->CI->load->database();
用这个
$this->CI->db1 = $this->CI->load->database('default', TRUE);
$this->CI->db2 = $this->CI->load->database('db2', TRUE);
这样,您不需要在所有模型文件中加载2 dbs,而是直接使用它们来使用它们。
$ this-&gt; db1 将访问默认组db, $ this-&gt; db2 将访问db2组db。 (两个数据库组都应该在database.php中定义)
孙大信
答案 5 :(得分:1)
如果您只需要在同一连接上使用不同的数据库,则无需创建单独的数据库配置。您可以在需要时切换到其他数据库,如下所示:
$这 - &GT; DB-&GT; db_select($ database2_name);