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.
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.
Es gibt mehrere Lösungen für diesen Fehler:
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.
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!