2017-04-26 2 views
-1

mehrere dynamische Datenbank zuzugreifen Ich möchte einen Master und mehrere Slave-Datenbank zuzugreifen (dynamisch) in codeigniter.Wie in Codeigniter

Verbindungszeichenfolge aller Slave-Datenbank in Master-Datenbank gespeichert. wie man auf die master-Datenbank in der Datenbank.php-Datei zugreift. oder gibt es eine andere Möglichkeit, dies zu tun?

$db['default']['dbname_prefix'] = $dbname_prefix; 
$db['default']['hostname'] = 'localhost'; 
$db['default']['username'] = $username_prefix.'root'; 
$db['default']['password'] = ''; 
$db['default']['database'] = $db_name; 
$db['default']['dbdriver'] = 'mysql'; 
$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['default']['_protect_identifiers']= FALSE; 

$db['msdb']['dbname_prefix'] = ''; 
$db['msdb']['hostname'] = 'should_be_come_from_first_database'; 
$db['msdb']['username'] = 'should_be_come_from_first_database'; 
$db['msdb']['password'] = 'should_be_come_from_first_database'; 
$db['msdb']['database'] = 'should_be_come_from_first_database'; 
$db['msdb']['dbdriver'] = 'mssql'; 

Vielen Dank im Voraus,

+2

MySQL <> SQL Server, die man verwenden Sie? – Chuck

+1

Haben Sie lesen [Codeigniter Dokumentation] (https://www.codeigniter.com/userguide3/database/connecting.html#connecting-to-multiple-databases)? –

+0

beide, Master-Datenbank läuft auf MySQL und alle anderen Slave-Datenbank läuft auf SQL-Server –

Antwort

0

Was Sie $db['default'] erwähnen wird Ihre Standard-Datenbank sein. wenn Sie msdb im Code zugreifen müssen, müssen Sie

$db = $this->load->database('msdb', TRUE); 
$query = $db->select('*')->get('tablename'); 

wie diese tun Lesen Sie über Connecting to Multiple Databases - codeigniter.com/userguide3


Wenn Sie manuell DB-Verbindung einrichten können Sie versuchen,

$config['hostname'] = 'localhost'; 
$config['username'] = 'myusername'; 
$config['password'] = 'mypassword'; 
$config['database'] = 'mydatabase'; 
$config['dbdriver'] = 'mysqli'; 
$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); 

Note : you can't set values inside database.php from outside. You're only able to access it in your Controller/Model

+0

Dies wird nicht funktionieren. Sie können nicht auf CI-Objekte zugreifen, ohne die Instanz in der conf-Datei zu laden. – Kisaragi

+0

** lol Lies es. ** Ich möchte nicht, dass es in Helfer oder andere lädt. Die Datenbankeinstellung ist im Controller. : P –

+0

Von der ursprünglichen Frage: "wie master-Datenbank in der Datenbank.php-Datei zugreifen". – Kisaragi

0

Warum nicht einfach die Anmeldeinformationen festlegen? Nun, hier ist ein Weg:

erstellen Sie eine neue Helfer-Datei: Db_helper.php:

function get_other_db_column_value($other_column) 
{ 
    $ci =& get_instance(); //get the ci instance 
    $ci->load->database(); // load default db; 
    $ci->db->select($other_column).....//select the column value you want 
    ... 
} 

In Ihrem db config:

$ci =& get_instance(); 
$ci->load->helper('Db'); //created above 
$db['msdb']['hostname'] = get_other_db_column_value('hostname'); 
+0

funktioniert nicht, sagt es Fatal error: Call auf eine Elementfunktion wählen() auf Zeichenfolge –

+0

ein Beispiel für Ihre einen String schreiben Sie in Ihrer SELECT-Anweisung verwenden, sind vorbei bitte – Kisaragi

0
$db['msdb']['dbname_prefix'] = ''; 
$db['msdb']['hostname'] = $db['default']['hostname']; 
$db['msdb']['username'] = $db['default']['username']; 
$db['msdb']['password'] = $db['default']['password']; 
$db['msdb']['database'] = $db['default']['database']; 
$db['msdb']['dbdriver'] = 'mssql'; 

Ist das, was Sie wollen?

database.php ist normale PHP-Datei, und $db ist normale Array, Sie können sofort zugreifen. Das ist der obige Code. Es verwendet $db['default'], um einige der $db['msdb'] Eigenschaften zu definieren.