множественная база данных в codeigniter - PullRequest
0 голосов
/ 24 января 2010

Я пытаюсь реализовать несколько баз данных в 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`)

Ответы [ 2 ]

0 голосов
/ 13 января 2011

В codeigniter есть ошибка. Вставка одной строки в класс все исправит. Вот оригинальный источник: http://koorb.wordpress.com/2007/11/16/codeigniter-connect-to-multiple-databases/

Вот копия на случай, если сайт отключится.

Номер строки изменился. Вот исправление ошибки из codeigniter:

----- начало исправления -----

Описание

все вызовы базы данных отправляются в одну и ту же базу данных (последний инициализирован)

Чтобы исправить проблему, измените функцию simple_query в /system/database/DB_driver.php:

function simple_query($sql)
{
    if ( ! $this->conn_id)
    {
        $this->initialize();
    }

    $this->db_select(); //<-----------------  Added this line
    return $this->_execute($sql);
}

--- END BUGFIX ----

Это полностью решает проблему, поэтому вы можете делать подобные вещи в модели

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

0 голосов
/ 25 января 2010

в файле тестера контроллера, пожалуйста, прокомментируйте строку: $ This-> load-> база данных ();

решит проблему

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...