Codeigniter – connexions de bases de données multiples

Je dois récupérer des informations sur la firebase database MySQL à partir de la firebase database principale, puis me connecter à cette firebase database et récupérer des enregistrements.

Je veux dire que détenant une firebase database, je veux charger une autre firebase database.

Est-ce possible avec Codeigniter? En ce moment, j’utilise les lignes de code suivantes dans mon modèle.

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); } 

son ne fonctionne-t-il pas?

Vous devez fournir les informations de la deuxième firebase database dans `application / config / database.php´

Normalement, vous définissez le groupe de firebase database default , comme ceci:

 $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']['ssortingcton'] = FALSE; 

Notez que les informations de connexion et les parameters sont fournis dans le tableau nommé $db['default'] .

Vous pouvez ensuite append une autre firebase database dans un nouveau tableau – appelons-le ‘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']['ssortingcton'] = FALSE; 

Maintenant, pour utiliser réellement la deuxième firebase database, vous devez envoyer la connexion à un autre code que vous pouvez utiliser dans votre modèle:

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

Ça devrait le faire. La documentation de connexion à plusieurs bases de données est disponible ici: http://codeigniter.com/user_guide/database/connecting.html

Utilisez ceci.

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

Usage

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

Le meilleur moyen consiste à utiliser différents groupes de bases de données. Si vous souhaitez continuer à utiliser la firebase database principale comme d’habitude ($ this-> db), désactivez simplement l’option de configuration de la connexion persistante à vos bases de données secondaires. Seule la firebase database master doit fonctionner avec une connexion persistante:

Base de données principale

 $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']['ssortingcton'] = FALSE; 

Base de données secondaire (remarque: pconnect est défini sur false)

 $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']['ssortingcton'] = FALSE; 

Vous pouvez ensuite utiliser des bases de données secondaires en tant qu’objects de base de données tout en utilisant la firebase database master comme d’habitude:

 // 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()); 

En regardant votre code, la seule chose que je vois mal, c’est lorsque vous essayez de charger la deuxième firebase database:

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

Lorsque vous souhaitez récupérer l’object de firebase database, vous devez transmettre TRUE dans le deuxième argument.

A partir du Guide de l’utilisateur de Codeigniter :

En définissant le deuxième paramètre sur TRUE (booléen), la fonction retournera l’object de firebase database.

Donc, votre code devrait plutôt être:

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

Cela le fera fonctionner.

 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, 'ssortingcton' => 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, 'ssortingcton' => 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... 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); 

Remarque: Remplacez les mots «group_one» et «group_two» par les noms de groupes spécifiques auxquels vous vous connectez (ou transmettez les valeurs de connexion comme indiqué ci-dessus).

En définissant le deuxième paramètre sur TRUE (booléen), la fonction retournera l’object de firebase database.

Visitez https://www.codeigniter.com/userguide3/database/connecting.html pour plus d’informations.