Heim > Backend-Entwicklung > PHP-Tutorial > Warum erhalte ich den MySQL-Fehler 2014: „Abfragen können nicht ausgeführt werden, während andere ungepufferte Abfragen aktiv sind'?

Warum erhalte ich den MySQL-Fehler 2014: „Abfragen können nicht ausgeführt werden, während andere ungepufferte Abfragen aktiv sind'?

DDD
Freigeben: 2024-11-21 07:10:13
Original
243 Leute haben es durchsucht

Why Am I Getting MySQL Error 2014:

Ursachen des MySQL-Fehlers 2014: Abfragen können nicht ausgeführt werden, während andere ungepufferte Abfragen aktiv sind

Der MySQL-Fehler 2014 tritt auf, wenn versucht wird, eine Abfrage auszuführen, während eine andere ungepufferte Abfrage noch aktiv ist aktiv. Dies kann passieren, wenn vorbereitete Anweisungen verwendet werden, bei denen PDO::ATTR_EMULATE_PREPARES auf „false“ gesetzt ist.

Erklärung

Wenn PDO::ATTR_EMULATE_PREPARES „true“ ist, emuliert PDO vorbereitete Anweisungen, indem es sie in normale SQL-Abfragen umwandelt. Dies bedeutet, dass der Server die Abfrage einmal für jede Datenzeile ausführt, sodass ungepufferte Abfragen gleichzeitig ausgeführt werden können.

Wenn PDO::ATTR_EMULATE_PREPARES jedoch „false“ ist, sendet PDO die vorbereitete Anweisung an den Server und halten Sie den Cursor offen. Dadurch wird verhindert, dass andere Abfragen ausgeführt werden, bis der Cursor geschlossen wird.

Lösungen

Es gibt mehrere Lösungen für diesen Fehler:

  • Gepufferte Abfragen aktivieren: Sie können das Attribut PDO::MYSQL_ATTR_USE_BUFFERED_QUERY verwenden, um gepufferte Abfragen zu aktivieren. Dadurch ruft PDO alle Ergebnisse einer Abfrage in den Speicher ab, bevor nachfolgende Abfragen ausgeführt werden.
  • **Verwenden Sie fetchAll(): Der Aufruf von fetchAll() für eine vorbereitete Anweisung schließt den Cursor und ermöglicht die Ausführung anderer Abfragen .
  • Cursor schließen:Sie können den Cursor auf einer vorbereiteten Anweisung mithilfe der Methode closeCursor() explizit schließen.

Zusätzliche Überlegungen

Im bereitgestellten Codeausschnitt gibt es ein Problem, bei dem die $stmt2-Abfrage innerhalb der Schleife mehrmals ausgeführt wird. Dies ist unnötig und kann zur Verbesserung der Leistung aus der Schleife verschoben werden.

Es wird außerdem empfohlen, benannte Parameter (PDO::bindParam()) anstelle von Positionsparametern (PDO::execute() mit einem Array) zu verwenden. für vorbereitete Stellungnahmen. Dadurch wird der Code besser lesbar und das Risiko einer SQL-Injection verringert.

Fazit

Der MySQL-Fehler 2014 kann dadurch verursacht werden, dass ungepufferte Abfragen nicht ordnungsgemäß verarbeitet werden. Durch die Verwendung gepufferter Abfragen, den Aufruf von fetchAll() oder das Schließen des Cursors kann dieser Fehler vermieden werden.

Das obige ist der detaillierte Inhalt vonWarum erhalte ich den MySQL-Fehler 2014: „Abfragen können nicht ausgeführt werden, während andere ungepufferte Abfragen aktiv sind'?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage