2009-03-11 12 views
31

database.php:Codeigniter - Verwenden mehrerer Datenbanken

$db['default']['hostname'] = "192.168.2.104"; 
$db['default']['username'] = "webuser"; 
$db['default']['password'] = "----"; 
$db['default']['database'] = "vad"; 
$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['stats']['hostname'] = "192.168.2.104"; 
$db['stats']['username'] = "webuser"; 
$db['stats']['password'] = "---"; 
$db['stats']['database'] = "vad_stats"; 
$db['stats']['dbdriver'] = "mysql"; 
$db['stats']['dbprefix'] = ""; 
$db['stats']['pconnect'] = TRUE; 
$db['stats']['db_debug'] = TRUE; 
$db['stats']['cache_on'] = FALSE; 
$db['stats']['cachedir'] = ""; 
$db['stats']['char_set'] = "utf8"; 
$db['stats']['dbcollat'] = "utf8_general_ci"; 

Das Problem ist, ich nur in der Konfiguration einer $active_group, default oder Statistiken definieren kann. Ich folgte der CodeIgniter Dokumentation und fügte ich folgendes:

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

So kann ich an die zweite Datenbank verbinden, aber ich verliere die Verbindung zum ersten. Hat jemand irgendwelche Ideen, wie ich die zwei Datenbank laden kann, ohne das folgende in allen Modellbauern zu machen?

$database1 = $this->load->database('database1', TRUE); 
$database2 = $this->load->database('database2', TRUE); 

Grüße,

Pedro

Antwort

24

Statt den Hack der Anwendung, wie Camacho erwähnt können Sie einstellen, auch die ‚pconnect'-Flag in der database.php Datei für alle Verbindungen auf FALSCH.

+0

Ich habe schreiben Artikel über mehrere Datenbankverbindungen erstellen In CodeIgniter Anwendungen. Bitte werfen Sie einen Blick und geben Sie Ihre Vorschläge https://www.cloudways.com/blog/connect-multiple-databases-codeigniter/ –

4

ich das Problem beheben auf dem Rahmen des DB_driver.php ändern.

In dieser Funktion füge ich $this->db_select(); hinzu und Sie verlieren nie wieder Ihre Verbindung, wenn Sie mit 2 Datenbanken arbeiten.

function simple_query($sql) 
{ 
    if (! $this->conn_id) 
    { 
     $this->initialize(); 
    } 

    $this->db_select(); 

    return $this->_execute($sql); 
} 
5

Gegenwärtig kann codeigniter keine Verbindung zu mehreren Datenbanken in persisten Verbindung herstellen. so, sollten Sie die persisten Ihrer Verbindungen drehen. Sie können können dies tun ..

$db['default']['pconnect'] = FALSE; 

$db['stats']['pconnect'] = FALSE; 
+0

, so dass wir den Datenbanknamen in db_select funtion erwähnen können? –

3

Sie können versuchen Funktion CI_Session Modifizieren() in session.php Datei.

ersetzen

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

mit diesem

$this->CI->db1 = $this->CI->load->database('default', TRUE); 
$this->CI->db2 = $this->CI->load->database('db2', TRUE); 

Auf diese Weise müssen Sie nicht geladen 2 dbs in allen Modelldateien aber wird sie direkt Objekte verwenden verwenden.

$ this-> db1 würde Standardgruppe db zugreifen und $ this-> db2 würde db2 Gruppe db zugreifen. (Beide db Gruppen sollten in database.php definiert wurden)


Sundar

29

Es ist ein Fehler in codeigniter. Wenn Sie eine Zeile in eine Klasse einfügen, wird das Ganze behoben. Hier ist die ursprüngliche Quelle: http://koorb.wordpress.com/2007/11/16/codeigniter-connect-to-multiple-databases/

** Dieses Update gilt nicht für PostgreSQL

Hier wird eine Kopie nur für den Fall, dass vor Ort untergeht.

Die Zeilennummer wurde geändert.Hier ist der Bug-Fix von codeigniter:

starten Bugfix

Beschreibung

alle Datenbank-Anrufe auf die gleiche Datenbank gehen (letzte initialisiert)

das Problem zu beheben in der simple_query Funktion ändern/System/database/DB_driver.php:

function simple_query($sql) 
{ 
    if (! $this->conn_id) 
    { 
     $this->initialize(); 
    } 

    $this->db_select(); //<----------------- Added this line 
    return $this->_execute($sql); 
} 

Dies behebt das Problem vollständig, so dass man Sachen wie diese in einem Modell tun

+0

CodeIgniter zeigt diesen unentschuldbaren Fehler im Oktober 2013, und dieser Fix funktioniert nicht. –

+0

Wenn Sie ein neues Projekt starten, kann ich vorschlagen, FuelPHP zu verwenden. Viele der gleichen Leute, die CodeIgniter geschrieben haben, migrierten dazu, CodeIgniter komplett neu zu schreiben und zu überdenken. Wenn Sie ein Legacy-Projekt verwenden oder Ihr Client CodeIgniter benötigt, sollte dieser Fix funktionieren. Aber wenn Sie einen anderen Weg finden, es zu reparieren, teilen Sie es bitte hier. Vielen Dank! – mrbinky3000

+0

Dies gilt immer noch für CI (Version 2.1.3) und viel besser als manuell jedesmal db_select() aufzurufen. –

1

Sie müssen keine separaten Datenbankkonfigurationen erstellen, wenn Sie nur eine andere Datenbank für dieselbe Verbindung verwenden müssen. Sie können bei Bedarf zu einer anderen Datenbank wechseln:

$ this-> db-> db_select ($ database2_name);

CodeIgbiter User Guide

Verwandte Themen