2013-03-11 8 views
7

Ho cercato di utilizzare più database con CodeIgniter. Se so in anticipo quali sono i database, posso impostare le informazioni nel file di configurazione e chiamare il gruppo di database di cui ho bisogno.CodeIgniter: database multipli - Accesso alla configurazione del database in un secondo database

Nella mia situazione, tuttavia, ho bisogno di memorizzare le informazioni del database in un altro database. È una specie di database principale con informazioni generali su un cliente, inclusi il database e le credenziali in cui sono archiviati i dati del cliente. Questo fornitore può quindi aggiungere i clienti ogni volta che lo desiderano e avere i dati di ciascun cliente separati in diversi database.

Come posso impostare il database e le credenziali in base ai valori che torno dal database master in CodeIgniter o esiste persino un modo per farlo?

Qualcuno può indicarmi la giusta direzione? Grazie in anticipo per qualsiasi consiglio.

+0

possibile duplicato di [Codeigniter - più connessioni database] (http://stackoverflow.com/questions/8268853/codeigniter-multiple-database-connections) –

risposta

9

Dalla documentazione (http://ellislab.com/codeigniter/user-guide/database/connecting.html):

Il primo parametro di questa funzione può essere eventualmente utilizzato per specificare un particolare gruppo di database dal file di configurazione, o si può anche presentare valori di connessione per un database non specificato nel file di configurazione .

Così si dovrebbe fare qualcosa di simile, sostituendo i valori con i valori dal maestro database:

$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); 

Se è necessario mantenere una connessione al banca dati master e il cliente database, quindi modificare l'ultima riga in:

$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

Ho perso completamente il fatto che è possibile passare un array o una stringa DSN (sempre il mio peggiore paura quando si pubblica una domanda qui). Grazie mille per la risposta! – spacemunkee

6

Rendere il master un database predefinito e il cliente per il secondo database
$ 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; 

è possibile caricare il secondo database in controller o nel modello da

$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; 

/** Il controller o modello **/

//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'); 

NOTA: Per ulteriori dettagli s, si riferiscono Config Class Codeigniter documentation

1

Aggiungi sotto la linea in applicazione \ 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; 

Ora usiamo la nostra seconda base di dati nel nostro controller e il modello come qui di seguito.

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

ho preso riferimento dal http://www.tutsway.com/use-multiple-db-connections-in-codeigniter.php lavoro di .E per me.