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

Était-ce utile?

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 que mysql_connect () ouvre toujours un   nouveau lien, même si mysql_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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top