代码标志器 - 使用多个数据库

2022-08-30 14:14:28

数据库.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";

问题是我只能在配置中定义一个,默认值或统计信息。我按照CodeIgniter文档进行了操作,并添加了以下内容:$active_group

$DB2 = $this->load->database('stats', TRUE);

通过这种方式,我连接到第二个数据库,但我失去了与第一个数据库的连接。有没有人对如何在不必在所有模型构造函数中执行以下操作的情况下加载两个数据库有任何想法?

$database1 = $this->load->database('database1', TRUE);
$database2 = $this->load->database('database2', TRUE); 

问候

佩德罗


答案 1

代码中存在一个错误。在类中插入一行将修复整个问题。以下是原始来源: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);

答案 2

除了应用Camacho提到的黑客攻击之外,您还可以将所有连接中的“pconnect”标志.php文件设置为FALSE。


推荐