2013-05-15 2 views
2

Я пытаюсь подключить две базы данных в Codeigniter. Я пришел по этой ссылке Codeigniter - multiple database connections и настроил базу данных в соответствии с моими требованиями. Теперь проблема в том, что активна только база данных по умолчанию. Вот код

МоделиПодключение двух баз данных в codeigniter не работает

function __construct() 
    { 
     parent::__construct(); 
     $this->db_2 = $this->load->database('database2', TRUE); 
     $this->load->database(); 

    } 

function get_details() 
    { 
     $result1 = $this->db->query("select columnname1 from tablename")->result(); 
     $result2 = $this->db_2->query("select columnname2 from tablename")->result(); 
    } 

Я получаю сообщение об ошибке, потому что columnname2 существует только в database2 таблицы, а не в Database1 таблицы.
Error: Unknown column 'columnname2' in 'field list'

database.php

$db['database2']['hostname'] = 'localhost'; 
$db['database2']['username'] = 'root'; 
$db['database2']['password'] = ''; 
$db['database2']['database'] = 'database2'; 
$db['database2']['dbdriver'] = 'mysql'; 
$db['database2']['dbprefix'] = ''; 
$db['database2']['pconnect'] = TRUE; 
$db['database2']['db_debug'] = TRUE; 
$db['database2']['cache_on'] = FALSE; 
$db['database2']['cachedir'] = ''; 
$db['database2']['char_set'] = 'utf8'; 
$db['database2']['dbcollat'] = 'utf8_general_ci'; 
$db['database2']['swap_pre'] = ''; 
$db['database2']['autoinit'] = TRUE; 
$db['database2']['stricton'] = FALSE; 

$active_group = 'default'; 
$active_record = TRUE; 
$db['default']['hostname'] = 'localhost'; 
$db['default']['username'] = 'root'; 
$db['default']['password'] = ''; 
$db['default']['database'] = 'database1'; 
$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['default']['swap_pre'] = ''; 
$db['default']['autoinit'] = TRUE; 
$db['default']['stricton'] = FALSE; 

UPDATE: Если я использую следующие

function __construct() 
    { 
     parent::__construct(); 
     $this->load->database(); 
     $this->db_2 = $this->load->database('database2', TRUE);  
    } 

database2 принимаются как активные Х и все запросы связаны с базой данных 2, даже если $this->db->query(); используется для указания запросов.

+1

Вы уверены, что параметры для 'database2' верны в вашем файле конфигурации? Вы говорите, что поле 'collumname2' существует в базе данных2, но ошибка говорит иначе, поэтому я могу только предположить, что, возможно, ваши переменные (и настройки конфигурации) для' $ this-> db' и '$ this-> db_2' соединяются с тот же 'db', где' columnname2' на самом деле не существует. –

+0

@RolandoIsidoro Включил скрипт базы данных database.php fron config к вопросу. –

+0

Попробуйте выполнить 'SHOW CREATE tablename;' или 'DESC tablename;' в обоих соединениях и посмотреть, отображается ли результат в том, что вы ожидаете, и поле 'collumname2' указано для' $ this-> db_2'. –

ответ

1

Вызов обоих экземпляров базы данных в вашем конструкторе приведет к переопределению другого. Самый простой способ - разделить вашу функцию и объединить их вместе.

function __construct() { 
    $this->load->database('default', true); 
} 

function merge_results() { 
    $result_a = $this->get_result_a(); 
    $result_b = $this->get_result_b(); 
    return array_merge($result_a,$result_b); 
} 

function get_result_a() { 
    return $this->db->query("select columnname1 from tablename")->result(); 
} 

function get_result_b() { 
    $other_db = $this->load->database('db2',true); 
    return $other_db->query("select columnname2 from tablename")->result(); 
} 
Смежные вопросы