Changer le DB connecté
-
06-07-2019 - |
Question
Il me semble que je vais et viens, parfois cela fonctionne pour moi, souvent cela ne fonctionne pas et je ne peux pas comprendre comment / pourquoi je peux le faire fonctionner parfois, et parfois cela ne fonctionne pas .
J'ai 5 bases de données et j'ai besoin de récupérer les données de chacune d'elles au cours d'une routine de maintenance. Pour chacune des bases de données, j'ai un fichier externe qui contient tout le code de connexion à la base de données que j'inclus dans ma page.
Les inclus ressemble à ceci
$SGcon = mysql_connect("localhost","root",""); if (!$SGcon) { die('Could not connect: ' . mysql_error()); } mysql_select_db("sGopen", $SGcon);
Pour chaque base de données, je fournis une version différente, donc la prochaine base de données sera
$PTcon = mysql_connect("localhost","root",""); if (!$PTcon) { die('Could not connect: ' . mysql_error()); } mysql_select_db("pTsecond", $PTcon);
Puis, lorsque j'appelle ma requête, j'utilise
mysql_query($getQuery, $PTcon); mysql_query($secondQuery, $SGcon);
Le problème que je rencontre est que je ne reçois pas la bonne base de données utilisée pour la requête. Mon script utilise apparemment les bases de données ajoutées à la dernière page.
Existe-t-il un meilleur moyen pour moi de changer de connexion de base de données à utiliser?
Il y a beaucoup de va-et-vient entre les bases de données lorsque je compare des données d'une base de données à des données d'une autre, aussi j'essaie d'être efficace avec cela également.
Merci Pete
La solution
Par défaut, si vous transmettez les mêmes arguments à mysql_connect lors d'un appel précédent il retournera une connexion en cache si disponible, plutôt que d'en créer une nouvelle. Les deux requêtes sont donc exécutées sur la dernière base de données que vous avez transmise à mysql_select_db
.
Passer new_link = true
évitera ce problème, même si les connexions à la base de données peuvent être coûteuses. Vous devez donc essayer de garder le moins possible ouvert.
L'explication détaillée de new_link:
Si un second appel est passé à
mysql_connect ()
avec le même arguments, aucun nouveau lien ne sera établi, mais au lieu de cela, le lien identifiant du lien déjà ouvert sera retourné. Le nouveau_lien paramètre modifie ce comportement et fait quemysql_connect ()
ouvre toujours un nouveau lien, même simysql_connect ()
était appelé avant avec le même paramètres. En mode sans échec SQL, cette paramètre est ignoré.
Autres conseils
Je pense que si vous fermez la connexion à la base de données entre chaque requête, vous résoudrez le problème.
Et si vous faites beaucoup de comparaisons entre bases de données, je n’utiliserais alors qu’une instruction select pour interroger toutes les bases de données à la fois.
À moins d’une raison particulière, vous souhaitez que les connexions à la base de données soient aussi basses que possible. Je voudrais utiliser une connexion et écrire une méthode pour étendre les fonctionnalités de la méthode mysql_query (). Vous pouvez lui transmettre la chaîne SQL et le nom de la table, puis la fonction appelle mysql_select_db ($ tableName) et réutilise cette même connexion pour traiter le code SQL.