Fehler “Cannot execute queries while other unbuffered queries are active”

Ihr bekommt folgenden Fehlermeldung:

Cannot execute queries while other unbuffered queries are active. Consider using PDOStatement::fetchAll(). Alternatively, if your code is only ever going to run against mysql, you may enable query buffering by setting the PDO::MYSQL_ATTR_USE_BUFFERED_QUERY attribute.

Die passiert meistens wenn 2 Stored Procedures (SP) nacheinander ausgeführt werden. Hierfür gibt es 3 Lösungen:

  1. Ihr führt jede SP mit einer eigenen Datenbankverbindung aus. Dies ist eher als Workaround zu sehen, denn dafür müsst Ihr eine zusätzlichen Datenbankverbindung anlegen und wenn Ihr irgendwann einmal 3 SP’s hintereinander ausführen wollt, dann müsst Ihr eine Dritte anlegen.
  2. Ihr führt die SP’s als Transaktion aus mit den entsprechenden Macros, etwas so:
sc_begin_trans ();

     $str_sp1 = "call SP1()";

     sc_exec_sql($str_sp1);

     $str_sp2 = "call SP2()";

     sc_exec_sql($str_sp2);

sc_commit_trans ();

Dann werden die  SP's innerhalb der Transaktion einwandfrei ausgeführt, es gibt auch noch einen weiteren Vorteil, Ihr konnt über die Macros einen evtl. Fehler abfangen und die Transaktion abbrechen und so stellt Ihr zusätzliche Datensicherheit her.

3. Ihr bekommt den fehler bei einem Grid weil Ihr in einem Event, meist bei onRecord noch eine Abfrage ausführt. Gewöhnlich für das nicht zu einem Fehler aber dieses Verhalten kann passieren wenn Ihr beim SQL String des Grids eine Semikolon am Ende gemacht habt.

Normalerweise kommt aj immer am Ende eines SQL-Strings ein Semikolon, aber lasst es weg wenn Ihr es gemacht habt, dann solltes auch  wieder funktionieren.

In diesem Kurzen Artikel könnt Ihr nachlesen warum es zu diesem Fehler in Verbindung mit Stored Procedures kommt.

https://phpdelusions.net/pdo

Schreibe einen Kommentar