Codeigniter – conexiones de bases de datos múltiples

Tengo que recuperar una información de la base de datos MySQL de la base de datos maestra y luego conectarme a esa base de datos y buscar algunos registros.

Quiero decir que sosteniendo una base de datos quiero cargar otra base de datos.

¿Es posible con Codeigniter? En este momento estoy usando las siguientes líneas de código en mi modelo.

function connectDb($credential) { $config['hostname'] = $credential['server']; $config['username'] = $credential['username']; $config['password'] = $credential['password']; $config['database'] = $credential['database']; $config['dbdriver'] = "mysql"; $config['dbprefix'] = ""; $config['pconnect'] = FALSE; $config['db_debug'] = TRUE; $config['cache_on'] = FALSE; $config['cachedir'] = ""; $config['char_set'] = "utf8"; $config['dbcollat'] = "utf8_general_ci"; $DB2=$this->load->database($config); $DB2->db->select('first_name,last_name'); $query = $DB2->db->get('person'); print_r($query); } 

no funciona, ¿hay alguna otra manera?

Debería proporcionar la segunda información de la base de datos en `application / config / database.php’

Normalmente, establecería el grupo de base de datos default , así:

 $db['default']['hostname'] = "localhost"; $db['default']['username'] = "root"; $db['default']['password'] = ""; $db['default']['database'] = "database_name"; $db['default']['dbdriver'] = "mysql"; $db['default']['dbprefix'] = ""; $db['default']['pconnect'] = TRUE; $db['default']['db_debug'] = FALSE; $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; 

Tenga en cuenta que la información de inicio de sesión y la configuración se proporcionan en la matriz llamada $db['default'] .

A continuación, puede agregar otra base de datos en una nueva matriz, llamémosla ‘otherdb’.

 $db['otherdb']['hostname'] = "localhost"; $db['otherdb']['username'] = "root"; $db['otherdb']['password'] = ""; $db['otherdb']['database'] = "other_database_name"; $db['otherdb']['dbdriver'] = "mysql"; $db['otherdb']['dbprefix'] = ""; $db['otherdb']['pconnect'] = TRUE; $db['otherdb']['db_debug'] = FALSE; $db['otherdb']['cache_on'] = FALSE; $db['otherdb']['cachedir'] = ""; $db['otherdb']['char_set'] = "utf8"; $db['otherdb']['dbcollat'] = "utf8_general_ci"; $db['otherdb']['swap_pre'] = ""; $db['otherdb']['autoinit'] = TRUE; $db['otherdb']['stricton'] = FALSE; 

Ahora, para usar realmente la segunda base de datos, debe enviar la conexión a otra variabel que puede usar en su modelo:

 function my_model_method() { $otherdb = $this->load->database('otherdb', TRUE); // the TRUE patwigter tells CI that you'd like to return the database object. $query = $otherdb->select('first_name, last_name')->get('person'); var_dump($query); } 

Deberias hacer eso. La documentación para conectarse a múltiples bases de datos se puede encontrar aquí: http://codeigniter.com/user_guide/database/connecting.html

Utilizar esta.

 $dsn1 = 'mysql://user:password@localhost/db1'; $this->db1 = $this->load->database($dsn1, true); $dsn2 = 'mysql://user:password@localhost/db2'; $this->db2= $this->load->database($dsn2, true); $dsn3 = 'mysql://user:password@localhost/db3'; $this->db3= $this->load->database($dsn3, true); 

Uso

 $this->db1 ->insert('tablename', $insert_array); $this->db2->insert('tablename', $insert_array); $this->db3->insert('tablename', $insert_array); 

La mejor manera es usar diferentes grupos de bases de datos. Si desea seguir utilizando la base de datos maestra como de costumbre ($ this-> db) simplemente desactive la opción de configuración de conexión persistente a su (s) base (s) de datos secundaria (s). Solo la base de datos master debe funcionar con conexión persistente:

Base de datos principal

 $db['default']['hostname'] = "localhost"; $db['default']['username'] = "root"; $db['default']['password'] = ""; $db['default']['database'] = "database_name"; $db['default']['dbdriver'] = "mysql"; $db['default']['dbprefix'] = ""; $db['default']['pconnect'] = TRUE; $db['default']['db_debug'] = FALSE; $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; 

Base de datos secundaria (notificación de pconnect se establece en falso)

 $db['otherdb']['hostname'] = "localhost"; $db['otherdb']['username'] = "root"; $db['otherdb']['password'] = ""; $db['otherdb']['database'] = "other_database_name"; $db['otherdb']['dbdriver'] = "mysql"; $db['otherdb']['dbprefix'] = ""; $db['otherdb']['pconnect'] = FALSE; $db['otherdb']['db_debug'] = FALSE; $db['otherdb']['cache_on'] = FALSE; $db['otherdb']['cachedir'] = ""; $db['otherdb']['char_set'] = "utf8"; $db['otherdb']['dbcollat'] = "utf8_general_ci"; $db['otherdb']['swap_pre'] = ""; $db['otherdb']['autoinit'] = TRUE; $db['otherdb']['stricton'] = FALSE; 

Luego puede usar bases de datos secundarias como objetos de base de datos mientras usa la base de datos maestra como de costumbre:

 // use master dataabse $users = $this->db->get('users'); // connect to secondary database $otherdb = $this->load->database('otherdb', TRUE); $stuff = $otherdb->get('struff'); $otherdb->insert_batch('users', $users->result_array()); // keep using master database as usual, for example insert stuff from other database $this->db->insert_batch('stuff', $stuff->result_array()); 

Mientras miro su código, lo único que veo mal es cuando intenta cargar la segunda base de datos:

 $DB2=$this->load->database($config); 

Cuando desee recuperar el objeto de base de datos, debe pasar VERDADERO en el segundo argumento.

De la Guía del usuario de Codeigniter :

Al establecer el segundo parámetro en VERDADERO (booleano), la función devolverá el objeto de la base de datos.

Entonces, tu código debería ser:

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

Eso lo hará funcionar.

 This is default database : $db['default'] = array( 'dsn' => '', 'hostname' => 'localhost', 'username' => 'root', 'password' => '', 'database' => 'mydatabase', 'dbdriver' => 'mysqli', 'dbprefix' => '', 'pconnect' => TRUE, '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 ); Add another database at the bottom of database.php file $db['second'] = array( 'dsn' => '', 'hostname' => 'localhost', 'username' => 'root', 'password' => '', 'database' => 'mysecond', 'dbdriver' => 'mysqli', 'dbprefix' => '', 'pconnect' => TRUE, '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 ); In autoload.php config file $autoload['libraries'] = array('database', 'email', 'session'); The default database is worked fine by autoload the database library but second database load and connect by using constructor in model and controller... < ?php class Seconddb_model extends CI_Model { function __construct(){ parent::__construct(); //load our second db and put in $db2 $this->db2 = $this->load->database('second', TRUE); } public function getsecondUsers(){ $query = $this->db2->get('members'); return $query->result(); } } ?> 
 If you need to connect to more than one database simultaneously you can do so as follows: $DB1 = $this->load->database('group_one', TRUE); $DB2 = $this->load->database('group_two', TRUE); 

Nota: Cambie las palabras “group_one” y “group_two” a los nombres de grupo específicos a los que se está conectando (o puede pasar los valores de conexión como se indicó anteriormente).

Al establecer el segundo parámetro en VERDADERO (booleano), la función devolverá el objeto de la base de datos.

Visite https://www.codeigniter.com/userguide3/database/connecting.html para obtener más información.