2013-03-11 1 views
7

Ich habe in der Verwendung mehrerer Datenbanken mit CodeIgniter untersucht. Wenn ich weiß, was die Datenbanken im voraus sind, kann ich die Informationen in der Konfigurationsdatei einstellen und dann die Datenbankgruppe aufrufen, die ich brauche.CodeIgniter: Mehrere Datenbanken - Zugreifen auf Datenbankkonfiguration in einer zweiten Datenbank

In meiner Situation muss ich jedoch diese Datenbankinformationen in einer anderen Datenbank speichern. Es ist eine Art Master-Datenbank mit allgemeinen Informationen über einen Kunden, einschließlich der Datenbank und der Anmeldeinformationen, in denen die Kundendaten gespeichert sind. Dieser Anbieter kann dann Kunden hinzufügen, wann immer sie möchten, und die Daten jedes Kunden in verschiedenen Datenbanken trennen.

Wie kann ich die Datenbank und die Berechtigungsnachweise basierend auf den Werten setzen, die ich von der Master-Datenbank in CodeIgniter zurückerhalten habe, oder gibt es sogar eine Möglichkeit, dies zu tun?

Kann mir jemand in die richtige Richtung zeigen? Vielen Dank im Voraus für eine Beratung.

+0

mögliches Duplikat von [Codeigniter - mehrere Datenbankverbindungen] (http://stackoverflow.com/questions/8268853/codeigniter-multiple-database-connections) –

Antwort

9

Aus der Dokumentation (http://ellislab.com/codeigniter/user-guide/database/connecting.html):

Der erste Parameter dieser Funktion kann optional angeben eine bestimmte Datenbank Gruppe aus der Konfigurationsdatei verwendet werden, oder Sie können sogar Anschlusswerte für eine einreichen Datenbank, die nicht in Ihrer Konfigurationsdatei angegeben ist.

So würden Sie etwas tun, um die Werte mit Werten aus der Master ersetzt Datenbank:

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

Wenn Sie eine Verbindung mit der Master Datenbank und die Kunden zu halten brauchen Datenbank, dann ändern Sie die letzte Zeile zu:

$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

Ich habe komplett vermisst, dass Sie ein Array oder DSN String übergeben können (immer meine größte Angst, wenn Sie hier eine Frage stellen). Vielen Dank für die Antwort! – spacemunkee

6

Machen Sie den Master zu einer Standarddatenbank und den Kunden zur zweiten Datenbank
$ active_group = 'default'; $ active_record = WAHR;

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

können Sie die zweite Datenbank in Steuerung laden oder in Modell von

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

/** Ihr Controller oder Modell **/

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

HINWEIS: Für weitere Details s finden Config Class Codeigniter documentation

1

in Anwendung unter Leitung hinzufügen \ 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; 

Jetzt verwenden wir unsere zweite Datenbank in unserer Steuerung und Modell wie unten.

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

Ich habe Referenz von http://www.tutsway.com/use-multiple-db-connections-in-codeigniter.php .Es Arbeit für mich gemacht.