2009-03-11 18 views
31

database.php:Codeigniter - Utilizzo di database multipli

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

Il problema è che posso solo definire nella configurazione di uno $active_group, di default, o statistiche. Ho seguito la documentazione CodeIgniter e ho aggiunto il seguente:

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

In questo modo mi collego al secondo database, ma perdo la connessione al primo. Qualcuno ha qualche idea su come posso caricare i due database senza dover fare quanto segue in tutti i costruttori di modelli?

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

saluti,

Pedro

risposta

24

Invece di applicare l'hack come detto da Camacho è anche possibile impostare la 'pconnect'-flag nel file database.php FALSE per tutte le connessioni.

+0

devo articolo scrivere su di creare più connessioni database in CodeIgniter Applicazioni. Si prega di dare un'occhiata e dare i vostri suggerimenti https://www.cloudways.com/blog/connect-multiple-databases-codeigniter/ –

4

ho risolvere il problema cambiando la DB_driver.php sul quadro.

In questa funzione aggiungo $this->db_select(); e non si perde mai più la connessione quando si lavora con 2 database.

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

    $this->db_select(); 

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

al momento, codeigniter non può connettersi a più database in connessione permanente. quindi, si dovrebbe girare il persistere delle connessioni. si può può fare questo ..

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

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

in modo che possiamo citare il nome del database in db_select funtion? –

3

Si può provare a modificare la funzione CI_Session() nel file session.php.

Sostituire

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

con questo

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

In questo modo, non c'è bisogno di caricare 2 db in tutti i file del modello, ma li devono utilizzare direttamente utilizzando gli oggetti.

$ this-> DB1 sarebbe accedendo db gruppo di default e $ this-> db2 sarebbe accedendo al gruppo DB DB2. (Entrambi i gruppi db avrebbero dovuto essere definiti in database.php)


Sundar

29

c'è un bug in CodeIgniter. Inserire una riga in una classe risolverà il tutto. Ecco la fonte originale: http://koorb.wordpress.com/2007/11/16/codeigniter-connect-to-multiple-databases/

** Questa correzione non si applica a PostgreSQL

Ecco una copia nel caso in cui quel sito va giù.

Il numero di riga è cambiato.Ecco la correzione di bug da CodeIgniter:

Iniziamo bugfix

Descrizione

tutte le chiamate al database vanno allo stesso database (ultimo inizializzato)

Per risolvere il problema cambiare la funzione simple_query in/sistema/database/DB_driver.php:

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

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

questo risolve completamente il problema, in modo da poter fare cose come questa in un modello

$this->legacy_db = $this->load->database('legacy', true); 
+0

CodeIgniter presenta ancora questo errore imperdonabile nell'ottobre 2013 e questa correzione non funziona. –

+0

Se stai iniziando un nuovo progetto, ti suggerisco di usare FuelPHP. Molte delle stesse persone che hanno scritto CodeIgniter sono migrate a questa completa riscrittura e ripensamento di CodeIgniter. Se si è su un progetto legacy o il client richiede CodeIgniter, questa correzione dovrebbe funzionare. Ma se trovi un altro modo per risolverlo, per favore condividi qui. Grazie! – mrbinky3000

+0

Questo è ancora applicabile per CI (versione 2.1.3) e molto meglio di chiamare manualmente db_select() ogni volta. –

1

Non è necessario creare configurazioni di database separate se è necessario utilizzare un database diverso sulla stessa connessione. È possibile passare a un altro database quando è necessario, ad esempio:

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

CodeIgbiter User Guide

Problemi correlati