2013-07-18 13 views
5

Pomyślnie skonfigurowałem drugą bazę danych z podpisem kodu i udało mi się utworzyć tabelę. Problem polega na tym, że każda poprzednio istniejąca linia kodu, która używała $this->db, teraz używa drugiej bazy danych, więc naturalnie pojawia się błąd. Pozwól mi wyjaśnić z nieco więcej szczegółów:CodeIgniter Używanie wielu baz danych bez zmiany istniejącego kodu dla pierwszej bazy danych

Używam biblioteki migracji z codeigniter iw nowej migracji, tworzę bazę danych z dbforge jak tak $this->dbforge->create_database('website_store'). Do tej pory tak dobrze, to podłączam się do tej bazy danych za pomocą $DB2 = $this->load->database('store', TRUE); i tworzę tabelę. Wszystko jest tu również dobre.

Następnie końce migracji i CodeIgniter próbuje zaktualizować tabelę migracji do pchania najnowszą wersję, ale wygląda na store bazie zamiast domyślnej bazy danych, więc to wyskakuje ten błąd:

Table 'website_store.migrations' doesn't exist 
UPDATE `migrations` SET `version` = 45 

Mam nadzieję, że ktoś wie, o używaniu wielu baz danych i biblioteki migracji. Nawiasem mówiąc, w pliku database.php jest ustawiona na użycie domyślnej bazy danych: $active_group = "default";, a nie bazy danych sklepu, więc powinna działać. Wygląda na to, że biblioteka migracji widzi, że jest już załadowana baza danych, czuje się leniwy i używa tego.

UWAGA: Wygląda jak ci faceci mieli podobne problemy, które są ustalone przez ustawienie „p Starannie podłączyć” na „false”, ale byłoby miło, aby utrzymać połączenie zarówno bazy:

Convenient Way to Load Multiple Databases in Code Igniter

Error Using Multiple Database In CodeIgniter

+0

Dobrze, poszedłem z rozwiązaniem "pconnect" do "false". Nie to, co chciałem zrobić, ale działa. – Marco

Odpowiedz

1

w CI I mieć do czynienia z wieloma bazami danych przy użyciu:

function readFromOtherDB(){ 
    $config = array(
     'hostname' => "XXX", 
     'username' => "XXX", 
     'password' => "XXX", 
     'database' => "XXX", 
     'dbdriver' => "mysql", 
     'dbprefix' => "", 
     'pconnect' => FALSE, 
     'db_debug' => TRUE, 
     'cache_on' => FALSE, 
     'cachedir' => "", 
     'char_set' => "utf8", 
     'dbcollat' => "utf8_general_ci" 
    ); 

    $otherDb = $this->ci->load->database($config, true); 

    $query = $otherDb->get_where('users', array('email' => $_email)); 

    $otherDb->close(); 
} 
+0

Nie sądzę, że close() jest potrzebne, gdy pconnect ma wartość false. Niemniej jednak szukałem sposobu, aby to zrobić bez ustawienia pconnect = false – Marco

Powiązane problemy