2013-03-11 15 views
7

Szukałem do korzystania z wielu baz danych z CodeIgniter. Jeśli wiem, co bazy danych są przed czasem, to mogę ustawić informacje w pliku konfiguracyjnym, a następnie zadzwonić do dowolnej grupy bazy danych, której potrzebuję.CodeIgniter: wielu baz danych - Dostęp do bazy danych config w drugiej bazie

W mojej sytuacji, jednak muszę przechowywać te informacje do bazy danych w innej bazie danych. Jest to swego rodzaju bazy danych master z ogólnych informacji na temat klienta, w tym bazy danych i poświadczeń, że dane klienta są przechowywane w. Ten sprzedawca może następnie dodać klientów, kiedy chcą i mają dane każdego klienta posegregowane w różnych bazach danych.

Jak mogę ustawić bazę danych i poświadczenia oparte na wartościach wrócę z głównej bazy danych w CodeIgniter, czy jest tam nawet sposób to zrobić?

Czy ktoś może wskazać mi właściwy kierunek? Z góry dziękuję za radę.

+0

możliwy duplikat [Codeigniter - wiele połączeń z bazą danych] (http://stackoverflow.com/questions/8268853/codeigniter-multiple-database-connections) –

Odpowiedz

9

Od docs (http://ellislab.com/codeigniter/user-guide/database/connecting.html):

Pierwszy parametr tej funkcji może być ewentualnie wykorzystane do określenia określonej grupy bazy danych z pliku konfiguracyjnego, lub można nawet przedstawienia wartości połączenia dla bazy danych, która nie jest określona w pliku konfiguracyjnym .

Więc byś zrobił coś takiego, zastępujące wartości z wartościami z głównego bazy danych:

$config['hostname'] = "localhost"; 
$config['username'] = "myusername"; 
$config['password'] = "mypassword"; 
$config['database'] = "mydatabase"; 
$config['dbdriver'] = "mysql"; 
$config['dbprefix'] = ""; 
$config['pconnect'] = FALSE; 
$config['db_debug'] = TRUE; 
$config['cache_on'] = FALSE; 
$config['cachedir'] = ""; 
$config['char_set'] = "utf8"; 
$config['dbcollat'] = "utf8_general_ci"; 

$this->load->database($config); 

Jeśli potrzebujesz, aby utrzymać połączenie z głównego bazy i klienta bazę danych, a następnie zmień ostatnią linię na:

$customer_db = $this->load->database($config, TRUE); 

// to use the master database: 
$this->db->query("SELECT * FROM my_table"); 

// to then use the customer database: 
$customer_db->query("SELECT * FROM whatever"); 
+1

Całkowicie przegapiłem, że możesz przekazać tablicę lub ciąg DSN (zawsze mój najgorszy strach podczas zamieszczania pytania tutaj). Dziękuję bardzo za odpowiedź! – spacemunkee

6

Uczynić opanować bazę domyślną i klienta dla drugiej bazy
$ active_group = „default”; $ active_record = TRUE;

$db['default']['hostname'] = ''; 
    $db['default']['username'] = ''; 
    $db['default']['password'] = ''; 
    $db['default']['dbdriver'] = ''; 
    $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; 

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

można załadować drugą bazę danych w sterowniku lub w modelu przez

$DB2 = $this->load->database('secondDatabase', TRUE); 
3

/** config/database.php **/

$active_group = 'default'; 
$active_record = TRUE; 

$db['default']['hostname'] = ''; 
$db['default']['username'] = ''; 
$db['default']['password'] = ''; 
$db['default']['dbdriver'] = ''; 
$db['default']['dbprefix'] = ''; 
$db['default']['pconnect'] = TRUE; 
$db['default']['db_debug'] = (ENVIRONMENT !== 'production'); 
$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; 

/** kontroler lub model **/

//by default the master database will be loaded and you can directly access db using  $this->db 
    $result = $this->db->query("SELECT * FROM `your_table`")->limit(1)->get()->result(); 



$config['dbxyz']['hostname'] = $result->hostname; 
$config['dbxyz']['username'] = $result->username; 
$config['dbxyz']['password'] = $result->password; 
$config['dbxyz']['dbdriver'] = ''; 
$config['dbxyz']['dbprefix'] = ''; 
$config['dbxyz']['pconnect'] = TRUE; 
$config['dbxyz']['db_debug'] = (ENVIRONMENT !== 'production'); 
$config['dbxyz']['cache_on'] = FALSE; 
$config['dbxyz']['cachedir'] = ''; 
$config['dbxyz']['char_set'] = 'utf8'; 
$config['dbxyz']['dbcollat'] = 'utf8_general_ci'; 
$config['dbxyz']['swap_pre'] = ''; 
$config['dbxyz']['autoinit'] = TRUE; 
$config['dbxyz']['stricton'] = FALSE; 

//load database config 
$this->config->load('database'); 

//Set database config dynamically   
$this->config->set_item('dbxyz', $config); 

//Now you can load the new database using 
$this->dbxyz = $this->load->database('dbxyz'); 

UWAGA: Więcej szczegółów s, patrz Config Class Codeigniter documentation

1

Dodaj poniżej linii w aplikacji \ config \ database.php

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

Teraz używamy naszą drugą bazę w naszym kontrolerze i modelu jak poniżej.

$CI = &get_instance(); 
$this->db2 = $CI->load->database('mydb2', TRUE); 
$qry = $this->db2->query("SELECT * FROM employee"); 
print_r($qry->result()); 

Otrzymałem referencje od http://www.tutsway.com/use-multiple-db-connections-in-codeigniter.php. To jest praca dla mnie.

Powiązane problemy