Maison > base de données > tutoriel mysql > le corps du texte

Comment effectuer des requêtes inter-bases de données en PHP ?

Patricia Arquette
Libérer: 2024-11-10 12:42:02
original
249 Les gens l'ont consulté

How to Perform Cross-Database Queries in PHP?

Requêtes inter-bases de données en PHP : un guide complet

Cet article aborde la question de la construction de requêtes inter-bases de données en PHP, un problème qui a été précédemment exploré dans le contexte de MySQL. Malgré la réussite de requêtes inter-bases de données dans MySQL, l'auteur est tombé sur des échecs en tentant de répliquer le processus en PHP.

Plus précisément, l'auteur remet en question les limitations imposées par mysql_select_db sur l'utilisation d'une seule base de données à la fois, ce qui rend les requêtes inter-bases de données ne sont pas pratiques. De plus, l'alternative consistant à spécifier la base de données pour chaque requête est jugée fastidieuse.

Requêtes inter-bases de données en PHP

Surmontant les limitations de mysql_select_db, l'auteur a reçu une solution qui permet des jointures directes entre bases de données :

$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
");
Copier après la connexion

Dans cet exemple, la base de données spécifiée dans mysql_select_db devient la base de données par défaut pour le script. Cependant, la requête peut spécifier des tables de différentes bases de données en les référençant manuellement avec le nom de base de données approprié, comme indiqué avec another_db.table_on_another_db.

Approche alternative pour différents hôtes

Si les bases de données résident sur des hôtes différents, les jointures directes deviennent impossibles. Au lieu de cela, une approche à deux requêtes est recommandée :

$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);
Copier après la connexion

Cette méthode consiste à effectuer deux requêtes distinctes : une sur chaque base de données. La première requête récupère les identifiants des enregistrements qui répondent aux critères de la première base de données. Ces identifiants sont ensuite utilisés comme filtre pour la deuxième requête, qui récupère les enregistrements correspondants de la deuxième base de données.

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal