32

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

问候,

佩德罗

4

6 回答 6

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);
于 2011-01-12T22:01:36.880 回答
24

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

于 2009-06-03T15:47:23.973 回答
5

目前,codeigniter 无法在持久连接中连接到多个数据库。所以,你应该关闭你的连接的持久化。你可以这样做..

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

$db['stats']['pconnect'] = FALSE;
于 2010-07-06T08:16:51.610 回答
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);
}
于 2009-03-13T14:27:47.460 回答
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 个 db,而是应直接使用对象来使用它们。

$this->db1将访问默认组 db,$this->db2将访问 db2 组 db。(两个 db 组都应该在 database.php 中定义)


桑达尔

于 2010-10-14T05:50:33.850 回答
1

如果您只需要在同一连接上使用不同的数据库,则不需要创建单独的数据库配置。您可以在需要时切换到不同的数据库,如下所示:

$this->db->db_select($database2_name);

CodeIgbiter 用户指南

于 2016-11-24T00:33:31.693 回答