Ich möchte dynamisch von einer Datenbank auf eine andere wechseln, deren Name dynamisch vom Benutzer angegeben wurde.DB Forge, Code Igniter und dynamische Datenbankauswahl
Hier sind einige significative Fragmente meines Codes:
//database.php
$active_group = 'default';
$query_builder = TRUE;
$db['default'] = array(
'dsn' => '',
'hostname' => 'localhost',
'username' => 'root',
'password' => '',
'database' => 'firstbase',
'dbdriver' => 'mysqli',
'dbprefix' => '',
'pconnect' => FALSE,
'db_debug' => (ENVIRONMENT !== 'production'),
'cache_on' => FALSE,
'cachedir' => '',
'char_set' => 'utf8',
'dbcollat' => 'utf8_general_ci',
'swap_pre' => '',
'encrypt' => FALSE,
'compress' => FALSE,
'stricton' => FALSE,
'failover' => array(),
'save_queries' => TRUE
);
$db['newbase'] = $db['default'];
Wie Sie sehen können, ‚NEWBASE‘ ist eine einfache Kopie der Standardkonfiguration
//Install_model Model
echo "<BR>Active db :".$this->db->database;
$this->createDB($database);
$this->db->close();
//now $database is created
//load the 'newbase' group and assign it to $this->newDb
$this->newDb = $this->load->database('newbase', TRUE);
//this will output 'firstbase'
echo "<BR>so far, the active db is :".$this->newDb->database;
$this->newDb->database=$database;
//now this will output the $database string
echo "<BR>and now the active db is :".$this->newDb->database;
Nun, ich dbForge sein wollen in dieser neuen Datenbank verwendet.
Das funktioniert aber ... die Tabelle wird in 'firstbase' erstellt! Und obwohl die geladene Datenbank die zweite ist. Wie kann ich das lösen?
EDIT # 1
Offenbar ist $this->newDb->database=$database;
nicht persistent. Wenn die Verbindung geschlossen und dann wieder geöffnet wird, hat $this->newDb->database
den Wert, der ursprünglich in der Datenbankkonfigurationsdatei angegeben wurde. Aber das erklärt nicht, warum ich diese Ergebnisse bekomme, da ich die Verbindung nicht schließe.
Wenn ich dies der Konfigurationsdatei hinzufügen: $db['newbase']['database'] = '';
dann bekomme ich eine # 1046 Fehler: Keine Datenbank ausgewählt. Dies bestätigt die Tatsache, dass $this->newDb->database
nicht von dbforge verwendet wird, das stattdessen lieber den hartcodierten Wert verwendet.