Heim > Backend-Entwicklung > PHP-Tutorial > Warum tritt der MySQL-Fehler 2014 auf, wenn Abfragen gleichzeitig mit PDO ausgeführt werden?

Warum tritt der MySQL-Fehler 2014 auf, wenn Abfragen gleichzeitig mit PDO ausgeführt werden?

Mary-Kate Olsen
Freigeben: 2024-11-19 01:23:02
Original
1082 Leute haben es durchsucht

Why Does MySQL Error 2014 Occur When Executing Queries Concurrently with PDO?

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

Einführung

Dieser Fehler tritt auf, wenn versucht wird, mehrere Abfragen gleichzeitig auszuführen bei Verwendung von PDO mit PDO::ATTR_EMULATE_PREPARES auf „false“ gesetzt. Dies weist darauf hin, dass der MySQL-Server die Ausführung zusätzlicher Abfragen nicht verarbeiten kann, bis alle vorherigen ungepufferten Abfragen abgerufen wurden.

Grund für den Fehler

Das Standardverhalten von PDO besteht darin, vorbereitete Anweisungen zu emulieren, indem sie in ungepufferte Abfragen übersetzt werden . Ungepufferte Abfragen werden sofort ausgeführt und die Ergebnisse werden nicht auf der Clientseite gespeichert. Dies ermöglicht eine speichereffiziente Verarbeitung großer Ergebnismengen.

Beim Betrieb in diesem Modus erlegt MySQL jedoch eine Einschränkung auf, die die Ausführung nachfolgender Abfragen verhindert, während eine ungepufferte Abfrage noch ausgeführt wird. Hier entsteht der Fehler 2014.

Lösung

Es gibt mehrere Ansätze, diesen Fehler zu beheben:

  1. Gepufferte Abfragen aktivieren:Sie kann PDO::MYSQL_ATTR_USE_BUFFERED_QUERY in den Verbindungsparametern des PDO-Objekts auf true setzen. Dies weist PDO an, gepufferte Abfragen zu verwenden, die die Ergebnisse auf der Clientseite speichern und eine gleichzeitige Abfrageausführung ermöglichen.
  2. Verwenden Sie fetchAll() oder closeCursor(): Nach jeder ungepufferten Abfrageausführung Sie können PDOStatement::fetchAll() verwenden, um alle Ergebnisse auf einmal abzurufen. Alternativ gibt der Aufruf von closeCursor() die mit der ungepufferten Abfrage verbundenen Serverressourcen frei, sodass nachfolgende Abfragen ausgeführt werden können.
  3. Wechseln Sie zu mysqlnd: Die mysqlnd-Bibliothek bietet einen fortschrittlicheren und effizienteren Treiber für MySQL . Es unterstützt sowohl ungepufferte als auch gepufferte Abfragen und handhabt die gleichzeitige Abfrageausführung effektiver.

Empfohlene Best Practice

Für optimale Leistung und Effizienz wird empfohlen, bei der Verarbeitung großer Ergebnismengen gepufferte Abfragen zu verwenden oder wenn Parallelität von entscheidender Bedeutung ist. FetchAll() oder closeCursor() sollten nach jeder ungepufferten Abfrageausführung verwendet werden, um Serverressourcen freizugeben. Darüber hinaus wird die Verwendung von mysqlnd dringend empfohlen, um die MySQL-Konnektivität und -Leistung zu verbessern.

Das obige ist der detaillierte Inhalt vonWarum tritt der MySQL-Fehler 2014 auf, wenn Abfragen gleichzeitig mit PDO ausgeführt werden?. 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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage