2010-01-23 6 views
0

Я пытаюсь реализовать несколько баз данных в CI. Мой код здесь:несколько баз данных в codeigniter

//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`) 
+0

Нужно еще немного кода. Похоже, что нам не хватает некоторых частей. – jerebear

+0

Я загружаю, извлекаю рамки CI. после этого я пишу код выше. Я думаю, что нет недостающей части. Это именно тот ответ, который вы хотите для меня? извините, мой английский недостаточно хорош –

ответ

0

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

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

0

Существует ошибка в 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); 
} 

--- КОНЕЦ BUGFIX ----

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

$ this-> legacy_db = $ this-> load-> базы данных ('наследство', правда);

+0

Можете ли вы представить это как проблему для CodeIgniter или CodeIgniter Reactor, поэтому я не запомнил это, когда я протрезвел? https://bitbucket.org/ellislab/codeigniter-reactor –

Смежные вопросы