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 ?
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.
Les deux principales options disponibles lors de l'utilisation de mysql_select_db en PHP sont :
Aucune de ces options ne correspond à l'objectif d'effectuer des requêtes entre bases de données sans modifications laborieuses du code existant.
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 ");
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!