Ich habe derzeit nachfolgendes Problem in einer PHP-8.0-Anwendung in Verbindung mit MariaDB 10.3 (unter Ubuntu 20). Das Problem tritt nicht auf unter Windows 10 mit MariaDB 10.5 (und auch PHP 8.0). Ich vermute derzeit, dass es evtl. irgendeine Einstellung von PHP und/oder MariaDB ist und kein im PHP-Code (oder in der SQL-Anweisung) behebbarer Fehler. Aber wer weiß ...
Mein abgespeckter PHP-Code (inkl. SQL):
Dieser Code funktioniert erst mal einwandfrei. Aber nur bis
Hat jemand eine Idee? Sämtliche Suchergebnisse im Netz bzgl. der konkreten Fehlermeldung führen zu Lösungen, die in meinem Fall nicht zutreffen. Nämlich dass mehrere SQL-Anweisungen parallel ausgeführt werden, mehr als ein Result-Set ankommt oder man eine neue Abfrage startet, ohne die alte komplett abgerufen zu haben oder aus dem Speicher entfernt hat. Sämtliche mysqli-spezifischen Anweisungen in der ganzen PHP-Datei sind oben aufgelistet, mehr habe ich nicht. D. h. da kann nichts reinpfuschen.
EDIT: In der MariaDB-Konfiguration steht
Mein abgespeckter PHP-Code (inkl. SQL):
PHP-Quellcode
- // 2 Tabellen: daten (Felder: nummer, kunden_id), kunden (Felder: id, name)
- // [...] mysqli-Datenbankverbindung wird korrekt aufgebaut, steckt in Objekt $db [...]
- $stm = $db->prepare('
- SELECT d.nummer, k.name
- FROM daten d
- LEFT JOIN kunden k ON k.id = d.kunden_id
- WHERE k.id IN (?, ?, ?, ?, ?)
- ORDER BY k.name, d.nummer
- ')
- $stm->bind_param('iiiii', 1, 2, 3, 4, 5);
- $stm->execute(); // keine Exception und Ergebnis ist "true"
- $stm->store_result(); // <== hier tritt der Fehler auf: Commands out of sync; you can't run this command now
- // [...] $stm->bind_result [...] $stm->fetch() [...]
Dieser Code funktioniert erst mal einwandfrei. Aber nur bis
WHERE k.id IN (?, ?, ?, ?, ?)
und bind_param('iiiii', 1, 2, 3, 4, 5)
jeweils eine große Anzahl an Werten beinhaltet. Hunderte sind möglich, aber bei Tausenden kommt der genannte Fehler. Aber nur auf dem Linux-System. Nehme ich die WHERE-Bedingung ganz raus, so klappt es, auch wenn es (in meinem Fall) 35.000 Datensätze sind. Die Anzahl der Daten ist also kein Problem, sondern offenbar die Anzahl der Parameter.Hat jemand eine Idee? Sämtliche Suchergebnisse im Netz bzgl. der konkreten Fehlermeldung führen zu Lösungen, die in meinem Fall nicht zutreffen. Nämlich dass mehrere SQL-Anweisungen parallel ausgeführt werden, mehr als ein Result-Set ankommt oder man eine neue Abfrage startet, ohne die alte komplett abgerufen zu haben oder aus dem Speicher entfernt hat. Sämtliche mysqli-spezifischen Anweisungen in der ganzen PHP-Datei sind oben aufgelistet, mehr habe ich nicht. D. h. da kann nichts reinpfuschen.
EDIT: In der MariaDB-Konfiguration steht
max_allowed_packet = 16M
. Das wäre die einzige Einstellung, die mir hier einfallen würde. 16M sollte ausreichen, aber auch 32M oder 1G lösen das Problem nicht. Laut phpMyAdmin wird diese Einstellung aber durchaus übernommen.Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Marcus Gräfe“ ()