2 Stimmen

php mssql multiple connection, aus Versehen werden connect1 Datensätze in connection 2 aktualisiert, obwohl connection2 ordnungsgemäß geschlossen wurde

Die Anwendung ist PHP + MSSQL. Falsches Update bei mehreren Verbindungen. Ich habe zwei Verbindungen.

  1. Öffnen der Verbindung1.
  2. einen Prozess durchführen.
  3. Öffnen von Verbindung2 (Hinweis: Um Verbindung2 zu öffnen, benötigen wir die Datenbank von Verbindung1).
  4. einige Aktualisierungen in Verbindung 2 vornehmen.
  5. Schließen der Verbindung2.
  6. Aktualisierungs- und Einfügevorgang in Verbindung1, aber das System aktualisiert fälschlicherweise in Verbindung2-Datenbank anstelle von Verbindung1.

Wie sollen die Mehrfachverbindungen behandelt werden?

1voto

Marc B Punkte 347897

Wahrscheinlich geben Sie den Verbindungshandler in Ihren Abfrageaufrufen nicht an. Die mssql-Bibliotheken (wie mysql) verwenden standardmäßig die LETZTE geöffnete Verbindung als Vorgabe.

Also, in Pseudocode:

$con1 = mssql_connect("blah blah blah");
$result = mssql_query("SELECT blah blah blah");
$con2 = mssql_connect("blah blah blah"); <-- last opened, new default
$result2 = mssql_query("SELECT blah blah", $con1); 
                                           ^^^^^---force using original connection

0voto

danielson317 Punkte 2834

Ich glaube, ich habe meine eigene Lösung gefunden. Forumsbeitrag .

Der Kommentar steht unten. Ich verstehe ihn so: Wenn beide Datenbanken den gleichen Host und Benutzernamen haben, gibt mssql connect einfach die vorherige Verbindung mit diesen Parametern zurück. Dumm, aber das ist, was passiert.

Mehrere Aufrufe von mysql_connect mit denselben Parametern führen dazu, dass nur eine Ressource/Verbindung erstellt wird. Sobald die erste erstellt ist, geben nachfolgende Aufrufe von mysql_connect die gleiche Verbindung zurück.

Sobald Sie mysql_select_db aufrufen, verweisen beide Verbindungen auf dieselbe Datenbank. In meiner Entwicklung habe ich dies umgangen, indem ich die IP für den Servernamen in einem mysql_connect und localhost für den zweiten Aufruf verwendet habe. Dadurch wurden zwei getrennte Verbindungen hergestellt, aber die Anzahl der getrennten Datenbanken, mit denen man auf demselben Server arbeiten kann, wurde eingeschränkt.

In einem Skript wäre eine weitere Möglichkeit, dies zu bewerkstelligen, den Namen der Datenbank in die Select-Anweisungen einzuschließen oder mit mysql_select_db direkt vor dem Select zwischen den Datenbanken zu wechseln.

Ich brauchte zwei verschiedene Verbindungen, da ich mysql_select_db nicht in meinen anderen Klassen aufrufen wollte.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X