183 votes

Comment vous connectez-vous à plusieurs bases de données MySQL sur une seule page Web?

- Je avoir des informations dispersées dans quelques bases de données et souhaitez mettre toutes les informations sur une page web en utilisant PHP. Je me demandais comment je peux me connecter à plusieurs bases de données sur une seule page web PHP.

Je sais comment se connecter à une base de données unique à l'aide de:

$dbh = mysql_connect($hostname, $username, $password) 
        or die("Unable to connect to MySQL");

Cependant, puis-je utiliser plusieurs "mysql_connect" les commandes pour ouvrir les autres bases de données, et comment les connaissances en PHP base de données que je souhaite que les informations extraites à partir si je ne disposer de plusieurs bases de données connectées.

340voto

Tom Haigh Points 32314

Vous pouvez faire plusieurs appels à l' mysql_connect(), mais si les paramètres sont les mêmes, vous devez passer le vrai pour le"$new_link' (quatrième) paramètre, sinon la même connexion est réutilisée.

alors vous avez

$dbh1 = mysql_connect($hostname, $username, $password); 
$dbh2 = mysql_connect($hostname, $username, $password, true); 

mysql_select_db('database1', $dbh1);
mysql_select_db('database2', $dbh2);

Puis, à la requête de base de données 1, faire:

mysql_query('select * from tablename', $dbh1);

et pour la base de données 2:

mysql_query('select * from tablename', $dbh2);

Sinon, si l'utilisateur mysql a accès à deux bases de données et ils sont sur le même hôte (c'est à dire deux bd sont accessibles à partir de la même connexion MySQL), vous pouvez:

  • Garder une connexion ouverte et continuer à appeler, mysql_select_db() échanger entre les. Je ne pense pas que c'est une solution propre et vous pourrez facilement obtenir les cas où une requête sur le mauvais db etc.
  • Utilisation de requêtes dans laquelle vous indiquez le nom de base de données (par exemple, SELECT * FROM database2.tablename), mais c'est encore susceptible d'être une douleur à mettre en œuvre.

Lire aussi troelskn de réponse sur l'utilisation de PDO plutôt parce que c'est probablement la meilleure approche.

102voto

troelskn Points 51966

Si vous utilisez PHP5 (Et vous devriez, étant donné que PHP4, a été déprécié), vous devez utiliser PDO, puisque c'est en train de devenir la nouvelle norme. Un (très) important de bénéficier de l'AOP, c'est qu'il prend en charge les paramètres attachés, ce qui rend pour beaucoup plus de code sécurisé.

Que vous vous connectez par le biais de PDO, comme ceci:

try {
  $db = new PDO('mysql:dbname=databasename;host=127.0.0.1', 'username', 'password');
} catch (PDOException $ex) {
  echo 'Connection failed: ' . $ex->getMessage();
}

(Bien sûr remplacer databasename, le nom d'utilisateur et mot de passe ci-dessus)

Ensuite, vous pouvez interroger la base de données comme ceci:

$result = $db->query("select * from tablename");
foreach ($result as $row) {
  echo $row['foo'] . "\n";
}

Ou, si vous avez des variables:

$stmt = $db->prepare("select * from tablename where id = :id");
$stmt->execute(array(':id' => 42));
$row = $stmt->fetch();

Si vous avez besoin de plusieurs connexions à la fois, vous pouvez simplement créer plusieurs instances de l'AOP:

try {
  $db1 = new PDO('mysql:dbname=databas1;host=127.0.0.1', 'username', 'password');
  $db2 = new PDO('mysql:dbname=databas2;host=127.0.0.1', 'username', 'password');
} catch (PDOException $ex) {
  echo 'Connection failed: ' . $ex->getMessage();
}

10voto

Ihsan Kusasi Points 101

Je viens de rendre ma vie simple:

 CREATE VIEW another_table AS SELECT * FROM another_database.another_table;
 

J'espère que c'est utile ... acclamations ...

5voto

Paks Points 43

Essayez ci-dessous le code:

     $conn = mysql_connect("hostname","username","password");
    mysql_select_db("db1",$conn);
    mysql_select_db("db2",$conn);

    $query1 = "SELECT * FROM db1.table";
    $query2 = "SELECT * FROM db2.table";
 

Vous pouvez récupérer les données de la requête ci-dessus à partir des deux bases de données comme ci-dessous

 $rs = mysql_query($query1);
while($row = mysql_fetch_assoc($rs)) {
    $data1[] = $row;
}

$rs = mysql_query($query2);
while($row = mysql_fetch_assoc($rs)) {
    $data2[] = $row;
}

print_r($data1);
print_r($data2);
 

3voto

Lasar Points 2008

Vous pouvez également consulter l'un des nombreux outils d'abstraction de base de données disponibles. Cependant, ils feront généralement la même chose que Tom décrit pour garder plusieurs connexions ouvertes en même temps.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X