Maison  >  Article  >  base de données  >  Comment puis-je effectuer des requêtes inter-bases de données en PHP avec plusieurs bases de données sur le même hôte ?

Comment puis-je effectuer des requêtes inter-bases de données en PHP avec plusieurs bases de données sur le même hôte ?

Susan Sarandon
Susan Sarandonoriginal
2024-11-10 20:28:03542parcourir

How can I perform cross database queries in PHP with multiple databases on the same host?

Requêtes croisées de bases de données en PHP

Dans un article précédent, nous avons exploré la construction de requêtes croisées de bases de données dans MySQL. Bien que cette approche ait fonctionné efficacement dans MySQL, son application directe dans PHP s'est avérée difficile. Plus précisément, l'utilisation de mysql_select_db en PHP pose des limitations lors de la tentative d'accès à plusieurs bases de données.

Options et limitations

Les deux principales options disponibles lors de l'utilisation de mysql_select_db en PHP sont :

  1. Restreindre l'accès à une seule base de données, empêchant les requêtes de base de données.
  2. Omettre mysql_select_db, qui nécessite de spécifier la base de données pour chaque requête.

Aucune de ces options ne correspond à l'objectif d'effectuer des requêtes entre bases de données sans modifications laborieuses du code existant.

Solution : même hôte Configuration

Pour résoudre ce problème, vos bases de données doivent résider sur le même hôte. Cela vous permet de spécifier manuellement une base de données étrangère tout en conservant une connexion à votre base de données par défaut préférée.

$db = mysql_connect($host, $user, $password);
mysql_select_db('my_most_used_db', $db);

$q = mysql_query("
    SELECT *
    FROM   table_on_default_db a, `another_db`.`table_on_another_db` b
    WHERE  a.id = b.fk_id
");

Solution alternative : des hôtes séparés

Si vos bases de données résident sur des hôtes différents, les jointures directes ne sont pas possibles. Dans ce scénario, vous pouvez exécuter des requêtes distinctes sur un hôte spécifique :

$db1 = mysql_connect($host1, $user1, $password1);
$db2 = mysql_connect($host2, $user2, $password2);

$q1 = mysql_query("
    SELECT id
    FROM   table
    WHERE  [..your criteria for db1 here..]
", $db1);
$tmp = array();
while($val = mysql_fetch_array($q1))
    $tmp[] = $val['id'];

$q2 = mysql_query("
    SELECT *
    FROM   table2
    WHERE  fk_id in (".implode(', ', $tmp).")
", $db2);

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn