Heim >Datenbank >MySQL-Tutorial >Warum gibt MySQL den Fehler 2014 zurück: „Abfragen können nicht ausgeführt werden, während andere ungepufferte Abfragen aktiv sind'?

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

Susan Sarandon
Susan SarandonOriginal
2024-12-23 15:42:10823Durchsuche

Why Does MySQL Return Error 2014:

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

Das Client-Protokoll von MySQL schränkt die gleichzeitige Ausführung mehrerer Abfragen ein, wenn die Ergebnisse vorliegen einer vorherigen Abfrage wurden nicht vollständig abgerufen. Diese Einschränkung ergibt sich aufgrund der ungepufferten Natur einiger Abfragen, bei denen Zeilen inkrementell abgerufen werden, anstatt sofort zwischengespeichert zu werden, wie bei gepufferten Abfragen.

Wenn Sie eine ungepufferte Abfrage ausführen und versuchen, eine weitere Abfrage auszuführen, bevor alle Zeilen aus der Abfrage abgerufen werden Zunächst gibt MySQL den Fehler „Abfragen können nicht ausgeführt werden, während andere ungepufferte Abfragen aktiv sind“ zurück.

Emuliert Vorbereitete Anweisungen

PDO::ATTR_EMULATE_PREPARES gibt an, ob vorbereitete Anweisungen emuliert oder als native MySQL-vorbereitete Anweisungen ausgeführt werden. Wenn es auf „false“ gesetzt ist, kann die Verwendung ungepufferter PHP-Abfragen den Fehler 2014 auslösen. Dies liegt daran, dass der interne Caching-Mechanismus von PHP für Abfrageergebnisse ungepufferte Abfragen nicht ordnungsgemäß verarbeitet.

Behebung des Fehlers

Es gibt mehrere Möglichkeiten, diesen Fehler zu beheben:

  • Verwenden Sie Gepufferte Abfragen: Durch die Aktivierung von PDO::MYSQL_ATTR_USE_BUFFERED_QUERY werden Abfragen im gepufferten Modus ausgeführt, der automatisch alle Zeilen auf einmal abruft. Dies kann jedoch speicherintensiv sein, wenn die Ergebnismenge groß ist.
  • Alle Zeilen abrufen: Der Aufruf von fetchAll() für eine Abfrage stellt sicher, dass alle Zeilen abgerufen und der Ergebniscursor geschlossen wird , sodass nachfolgende Abfragen fehlerfrei ausgeführt werden können.
  • Cursor schließen: Das Schließen des Cursors mit closeCursor() gibt frei MySQL-Ressourcen sind mit der ungepufferten Abfrage verknüpft und ermöglichen die Ausführung nachfolgender Abfragen. Dies verhindert jedoch das Abrufen verbleibender Zeilen aus der ungepufferten Abfrage.

Best Practices

Um diesen Fehler zu vermeiden, wird Folgendes empfohlen:

  • Verwenden Sie gepufferte Abfragen oder standardmäßig fetchAll() für ungepufferte Abfragen, die eine begrenzte Anzahl von Abfragen abrufen Zeilen.
  • Vermeiden Sie verschachtelte Abfragen, wenn dies nicht erforderlich ist, da die mehrmalige Ausführung der inneren Abfrage innerhalb einer Schleife den Fehler verschlimmern kann.
  • Schließen Sie die Cursor, wenn Sie mit dem Abrufen der Daten fertig sind, um Serverressourcen freizugeben und verhindern Sie, dass der Fehler auftritt.
  • Erwägen Sie die Migration zum mysqlnd-Treiber, der speichereffizienter ist und emulierte Vorbereitungen unterstützt Aussagen.

Das obige ist der detaillierte Inhalt vonWarum gibt MySQL den Fehler 2014 zurück: „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!

Stellungnahme:
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