Php codeigniter中的多数据库

Php codeigniter中的多数据库,php,codeigniter,frameworks,Php,Codeigniter,Frameworks,我正在尝试在CI中实现多个数据库。我的代码在这里: //database.php $active_group = "default"; $active_record = TRUE; $db['default']['hostname'] = "localhost"; $db['default']['username'] = "root"; $db['default']['password'] = "root"; $db['default']['database'] = "ravelex"; $d

我正在尝试在CI中实现多个数据库。我的代码在这里:

//database.php
$active_group = "default";
$active_record = TRUE;

$db['default']['hostname'] = "localhost";
$db['default']['username'] = "root";
$db['default']['password'] = "root";
$db['default']['database'] = "ravelex";
$db['default']['dbdriver'] = "mysql";
$db['default']['dbprefix'] = "rvx_";
$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['smf']['hostname'] = "localhost";
$db['smf']['username'] = "root";
$db['smf']['password'] = "root";
$db['smf']['database'] = "smf";
$db['smf']['dbdriver'] = "mysql";
$db['smf']['dbprefix'] = "smf_";
$db['smf']['pconnect'] = TRUE;
$db['smf']['db_debug'] = TRUE;
$db['smf']['cache_on'] = FALSE;
$db['smf']['cachedir'] = "";
$db['smf']['char_set'] = "utf8";
$db['smf']['dbcollat'] = "utf8_general_ci";
模型是

//user_model.php
class user_model extends Model {
    private $ravelex_db;
    function user_model() {
        parent::Model();
        $this->ravelex_db = $this->load->database('default', TRUE);
    }

    function find_all() {
        print_r($this->ravelex_db);
        $q = $this->ravelex_db->get('users');
        return $q->result();
    }
}

//smf_user_model.php
class smf_user_model extends Model {
    private $smf_db;

    function smf_user_model() {
        parent::Model();
        $this->smf_db = $this->load->database('smf', TRUE);
    }

    function find_all() {
        $q = $this->smf_db->get('members');
        return $q->result();
    }
}
控制器测试仪

    class mutipledb extends Controller {

    function mutipledb() {
        parent::Controller();
        $this->load->database();
        $this->load->model('user_model');
        $this->load->model('smf_user_model');
    }

    function index() {
        print_r($this->user_model->find_all());
        print_r($this->smf_user_model->find_all());
    }
}
出现一些错误,第一个数据库使用第二个数据库名称。但它仍然使用它的前缀

错误是

A Database Error Occurred
Error Number: 1146
Table 'smf.rvx_users' doesn't exist
SELECT * FROM (`rvx_users`)

在controller tester文件中,请注释以下行: $this->load->database()


将解决此问题

codeigniter中存在错误。在类中插入一行将解决整个问题。以下是原始资料来源:

这是一份副本,以防网站宕机

行号已更改。以下是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);
}
函数简单查询($sql)
{
如果(!$this->conn\u id)
{
$this->initialize();
}
$this->db_select();//\u execute($sql);
}
---结束错误修复----

这完全解决了问题,因此您可以在模型中执行类似的操作


$this->legacy_db=$this->load->database('legacy',true)

需要更多的代码。看起来我们缺少了一些部分。我下载,提取CI框架。然后我写上面的代码。我觉得没有遗漏的部分。这正是你想要给我的答案吗?对不起,我的英语不太好。你能把这个问题作为CodeIgniter或CodeIgniter Reactor的一个问题提交给我吗?所以我记得在我清醒的时候解决这个问题?