Frage

Ich scheine hin und her auf diese gehen, manchmal funktioniert es für mich, oft ist es nicht, und ich kann nicht herausfinden, wie / warum ich kann es manchmal zu arbeiten, und zu anderen Zeiten wird es nicht .

Ich habe 5 Datenbanken und müssen Daten von jedem von ihnen während einer Wartungsroutine greifen. Für jede der Datenbanken, habe ich eine externe Datei, die alle db Verbindungscode enthält, die ich in meiner Seite sind.

Das schließt wie folgt aussehen

$SGcon = mysql_connect("localhost","root","");

if (!$SGcon)
  {
  die('Could not connect: ' . mysql_error());
  }

mysql_select_db("sGopen", $SGcon);

Für jede Datenbank liefere ich eine andere varaible, so dass die nächste Datenbank wird

$PTcon = mysql_connect("localhost","root","");

if (!$PTcon)
  {
  die('Could not connect: ' . mysql_error());
  }

mysql_select_db("pTsecond", $PTcon);

Dann, wenn ich meine Abfrage nennen, verwende ich

 
mysql_query($getQuery,  $PTcon);
mysql_query($secondQuery, $SGcon);

Das Problem, das ich in laufen lasse, ist, dass ich nicht bin die richtige Datenbank für die Abfrage verwendet bekommen, so scheint es, mein Skript die Datenbanken verwendet, die auf die Seite zuletzt hinzugefügt wurden.

Gibt es einen besseren Weg für mich, die Datenbankverbindung wechseln verwendet werden?

Es gibt viele zurück und her zwischen den Datenbanken als ich dem Vergleich von Daten von einem db auf Daten in einem anderen, so versuche ich auch mit diesem effizient.

Danke Pete

War es hilfreich?

Lösung

In der Standardeinstellung, wenn Sie passieren die gleichen Argumente an mysql_connect als einen früheren Aufruf es wird eine zwischengespeicherte Verbindung, wenn verfügbar zurückkehren, anstatt einen neuen zu erstellen. Also beide Abfragen laufen gegen Unabhängig davon, welche Datenbank Sie zuletzt mysql_select_db übergeben.

new_link=true Passing wird dieses Verhalten vermeiden, obwohl Datenbankverbindungen können teuer sein, so sollten Sie versuchen, so wenig offen zu halten, wie vernünftigerweise möglich.

Die detaillierte Erklärung für new_link:

  

Wenn ein zweiter Anruf wird auf   mysql_connect() mit dem gleichen   Argumente, wird keine neue Verbindung sein   gegründet, sondern stattdessen der Link   Identifikator der bereits bestehenden Verbindung   Wird zurückgegeben. die new_link   Parameter ändert dieses Verhalten und   macht öffnen mysql_connect() immer ein   neue Verbindung, auch wenn mysql_connect() war   bevor sie mit dem gleichnamigen   Parameter. In SQL abgesicherten Modus, diese   Parameter ignoriert.

Andere Tipps

Ich denke, wenn Sie die DB-Verbindung zwischen jeder Abfrage in der Nähe finden Sie das Problem lösen.

Und wenn Sie eine Menge vergleicht zwischen Datenbanken tun, dann würde ich 1 select-Anweisung nur auf einmal alle Datenbanken abfragen.

Es sei denn, es einen bestimmten Grund, möchten Sie db-Verbindungen so gering wie möglich zu halten. Ich würde eine Verbindung, die Verwendung und ein Verfahren schreiben, die Funktionalität der mysql_query () Methode zu verlängern. Man könnte es die SQL-Zeichenfolge übergeben, und der Tabellenname dann die Funktion aufruft mysql_select_db ($ tablename) und wiederverwendet, dass gleiche Verbindung die SQL zu verarbeiten.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top