2009-06-18 4 views
0

Ich scheine hier hin und her zu gehen, manchmal funktioniert es für mich, oft nicht und ich kann mir nicht vorstellen, wie/warum ich es manchmal und manchmal auch zur Arbeit bringen kann es wird nicht.Ändern der angeschlossenen DB

Ich habe 5 Datenbanken und muss während einer Wartungsroutine Daten von jedem von ihnen abrufen. Für jede der Datenbanken habe ich eine externe Datei, die den gesamten DB-Verbindungscode enthält, den ich in meine Seite einbeziehe.

Der aussehen enthält wie diese

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

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

mysql_select_db("sGopen", $SGcon); 

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

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

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

mysql_select_db("pTsecond", $PTcon); 

Dann wird, wenn ich meine Abfrage nennen, ich benutze

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

Das Problem, das ich renne ist, dass ich nicht die richtige Datenbank für die qu bekommen Es scheint, dass mein Skript die Datenbanken verwendet, die zuletzt zur Seite hinzugefügt wurden.

Gibt es eine bessere Möglichkeit für mich, die Datenbankverbindung zu wechseln, um verwendet zu werden?

Es gibt viel hin und her zwischen den Datenbanken, da ich Daten von einer Datenbank mit Daten in einer anderen Datenbank vergleiche, also versuche ich auch, damit effizient zu sein.

Dank Pete

Antwort

1

Wenn Sie dieselben Argumente als vorherigen Aufruf an übergeben, wird standardmäßig eine zwischengespeicherte Verbindung zurückgegeben (sofern verfügbar), anstatt eine neue Verbindung zu erstellen. Daher werden beide Abfragen für die Datenbank ausgeführt, die Sie zuletzt an mysql_select_db übergeben haben.

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

Die detaillierte Erklärung für new_link:

Wenn ein zweiter Anruf mysql_connect() mit den gleichen Argumente gemacht wird, wird keine neue Verbindung hergestellt werden, aber der Link Kennung der bereits geöffneten statt, Link wird zurückgegeben. Der new_link Parameter ändert dieses Verhalten und macht mysql_connect() immer öffnen Sie eine neue Verbindung, auch wenn mysql_connect() war , bevor sie mit den gleichen Parametern aufgerufen. Im SQL-abgesicherten Modus wird dieser Parameter ignoriert.

1

Ich denke, wenn Sie die DB-Verbindung zwischen jeder Abfrage schließen Sie das Problem lösen wird.

Und wenn Sie eine Menge Vergleiche zwischen Datenbanken machen, dann würde ich nur 1 Select-Anweisung verwenden, um alle Datenbanken auf einmal abzufragen.

+0

Das ist kein sehr guter oder performanter Ansatz. Es ist möglicherweise auch nicht praktisch, wenn Sie aus irgendwelchen Gründen Datenbankquellen für Abfragen verschachteln. – cletus

+0

Ich denke, das Problem würde auf Caching zurückzuführen sein. DB zu öffnen, wenn es nicht benutzt wird, ist auch nicht performant. – Sev

+0

Leider sind das nicht nur Abfragen, sondern auch Updates/Inserts, also glaube ich nicht, dass das funktionieren würde. Danke für das Feedback obwohl. – pedalpete

1

Wenn es keinen bestimmten Grund gibt, möchten Sie die db-Verbindungen so niedrig wie möglich halten.Ich würde eine Verbindung verwenden und eine Methode schreiben, um die Funktionalität der mysql_query() -Methode zu erweitern. Sie könnten ihm die SQL-Zeichenfolge übergeben, und der Tabellenname dann ruft die Funktion mysql_select_db ($ tableName) auf und verwendet dieselbe Verbindung erneut, um SQL zu verarbeiten.

+0

Sie haben wahrscheinlich Recht, dass ich die Funktionalität der mysql_query-Methode erweitern konnte, aber ich glaube nicht, dass ich auf einer ausreichend hohen Programmierstufe bin, um das auch tun zu können. Sie sagen mysql_select_db ($ tableName), ich nehme an, Sie meinten $ databaseName. Aber ist das nicht der gleiche Overhead wie new_link = true? Ich bin nicht wirklich vertraut mit den Unterschieden zwischen öffnenden und schließenden Verbindungen vs. wechselnden Datenbanken. – pedalpete

Verwandte Themen