web-dev-qa-db-fra.com

Comment se connecter à 2 bases de données en même temps dans PHP

J'essaie de me connecter à 2 bases de données sur la même instance de MySQL à partir d'un script 1 PHP.

Pour le moment, la seule façon dont j'ai compris est de se connecter aux deux bases de données avec un utilisateur différent pour chacune.

J'utilise ceci dans un script de migration où je récupère des données de la base de données d'origine et les insère dans la nouvelle, de sorte que je parcours des listes de résultats volumineuses.

La connexion à 1 base de données, puis la tentative d'établissement d'une seconde connexion avec le même utilisateur modifient simplement la base de données actuelle.

D'autres idées?

18
Darryl Hein

Vous aurez besoin de passer un true booléen comme quatrième argument optionnel à mysql_connect (). Voir la documentation de PHP mysql_connect () pour plus d'informations.

23
Lucas Oman

Si votre utilisateur de base de données a accès aux deux bases de données et qu'elles se trouvent sur le même serveur, vous pouvez utiliser une seule connexion et spécifier simplement la base de données que vous souhaitez utiliser avant le nom de la table. Exemple:

SELECT column
FROM database.table

En fonction de ce que vous devez faire, vous pourrez peut-être faire un INSERT INTO et économiser beaucoup de temps de traitement.

INSERT INTO database1.table (column)
SELECT database2.table.column
FROM database2.table
13
Joe Lencioni

Lucas a raison. Je suppose que les deux bases de données sont hébergées sur le même hôte.

Vous pouvez également créer une seule connexion à une base de données et continuer à permuter les bases de données selon les besoins. Voici un pseudo-code.

$db_conn = connect_db(Host, user, pwd);
mysql_select_db('existing_db', $db_conn);
 -- do selects and scrub data --
mysql_select_db('new_db', $db_conn);
-- insert the required data --
8
Gaurav

Je suggère d'utiliser deux gestionnaires de connexion

   $old = mysql_connect('old.database.com', 'user', 'pass);
   mysql_select_db('old_db', $old);


   $new = mysql_connect('new.database.com','user','pass);
   mysql_select_db('new_db', $new)

   // run select query on $old
   // run matching insert query on $new
3
The.Anti.9

Si c'est une option, utilisez PDO: vous pouvez avoir autant de connexions de base de données ouvertes que vous le souhaitez.

De plus, en supposant que vous exécutiez les mêmes requêtes à plusieurs reprises, vous pouvez utiliser des instructions préparées.

3
Gary Richardson

Vous pouvez facilement utiliser 2 bases de données en même temps avec les codes suivants:

<?php
  define('Host', "YOURHOSTNAME");
  define('USER', "YOURHOSTNAME");
  define('PASS', "YOURHOSTNAME");
  define('DATABASE1', "NAMEOFDATABASE1");
  define('DATABASE2', "NAMEOFDATABASE2");

  $DATABASE1  = mysqli_connect(Host, USER, PASS, DATABASE1);
  $DATABASE2  = mysqli_connect(Host, USER, PASS, DATABASE2);
  if(!$DATABASE1){
      die("DATABASE1 CONNECTION ERROR: ".mysqli_connect_error());
   }
  if(!$DATABASE2){
      die("DATABASE2 CONNECTION ERROR: ".mysqli_connect_error());
   }


   $sql = "SELECT * FROM TABLE";   /* You can use your own query */

   $DATABASE1_QUERY = mysqli_query($DATABASE1, $sql);
   $DATABASE2_QUERY = mysqli_query($DATABASE2, $sql);

   $DATABASE1_RESULT = mysqli_fetch_assoc($DATABASE1_QUERY);
   $DATABASE2_RESULT = mysqli_fetch_assoc($DATABASE2_QUERY);

   /* SHOW YOUR RESULT HERE WHICH DATABASE YOU WANT FROM */
   echo  $DATABASE1_RESULT['id'];
   echo  $DATABASE2_RESULT['id'];


  /*After complete your all work don't forgot about close database connections*/
  mysqli_close($DATABASE1);
  mysqli_close($DATABASE2);
      ?>
0
Rajpal Singh