tutorial español php database codeigniter

php - español - Codeigniter: uso de múltiples bases de datos



uri segment codeigniter 3 (6)

No necesita crear configuraciones de bases de datos separadas si solo necesita usar una base de datos diferente en la misma conexión. Puede cambiar a una base de datos diferente cuando lo necesite, de esta manera:

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

Guía del usuario de CodeIgbiter

database.php :

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

El problema es que solo puedo definir en la configuración $active_group , default o stats. Seguí la documentación de CodeIgniter y agregué lo siguiente:

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

De esta manera me conecto a la segunda base de datos, pero pierdo la conexión con la primera. ¿Alguien tiene alguna idea sobre cómo puedo cargar las dos bases de datos sin tener que hacer lo siguiente en todos los constructores de modelos?

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

Saludos,

Pedro


Arreglo el problema cambiando el DB_driver.php en el marco.

En esta función agrego $this->db_select(); y nunca pierde su conexión nuevamente cuando trabaja con 2 bases de datos.

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


En lugar de aplicar el truco como lo menciona Camacho, también puede establecer el indicador ''pconnect'' en el archivo database.php en FALSE para todas las conexiones.


Hay un error en codeigniter. Insertar una línea en una clase arreglará todo. Aquí está la fuente original: http://koorb.wordpress.com/2007/11/16/codeigniter-connect-to-multiple-databases/

** Esta solución no se aplica a PostgreSQL

Aquí hay una copia en caso de que el sitio se caiga.

El número de línea ha cambiado. Aquí está la corrección de errores de codeigniter:

iniciar corrección de errores

Descripción

todas las llamadas a la base de datos van a la misma base de datos (la última inicializada)

Para solucionar el problema, cambie la función simple_query en /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); }

Esto soluciona completamente el problema, por lo que puede hacer cosas como esta en un modelo

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


Puede intentar modificar la función CI_Session () en el archivo session.php.

Reemplazar

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

con este

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

De esta forma, no necesita cargar 2 db en todos los archivos de modelo, sino que debe usarlos directamente utilizando objetos.

$ this-> db1 estaría accediendo al grupo predeterminado db y $ this-> db2 estaría accediendo a db2 group db. (ambos grupos db deberían haberse definido en database.php)

Sundar


actualmente, codeigniter no puede conectarse a múltiples bases de datos en una conexión persistente. por lo tanto, debe pasar de la persistencia de sus conexiones. usted puede hacer esto ...

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