PHP-Befehle nicht synchron: Beheben des Fehlers bei der Verwendung mehrerer vorbereiteter Anweisungen
In PHP, wenn versucht wird, mehrere vorbereitete Anweisungen mit MySQLi auszuführen , kann es zu der Fehlermeldung „Befehle nicht synchron, Sie können den Befehl jetzt nicht ausführen“ kommen. Dieser Fehler tritt aufgrund der Standardverarbeitung von Ergebnismengen aus Abfragen durch MySQLi auf.
Eine mögliche Ursache für diesen Fehler ist die Verwendung von MYSQLI_USE_RESULT beim Ausführen der Abfrage. Dieser Modus optimiert die Leistung, indem er die Pufferung des gesamten Ergebnissatzes vermeidet. Allerdings ist es erforderlich, dass Sie das Ergebnis manuell mit mysqli_free_result() freigeben. Wenn Sie dies nicht tun, bevor Sie nachfolgende Anweisungen ausführen, ist die Befehlssequenz nicht mehr synchron.
Um dieses Problem zu beheben, stellen Sie sicher, dass Sie mysqli_free_result() aufrufen, nachdem Sie alle Zeilen aus jeder Anweisung abgerufen haben. Alternativ können Sie die Methode „store_result()“ verwenden, um den gesamten Ergebnissatz im Speicher zu speichern, sodass Sie später darauf zugreifen können, ohne sich Gedanken über mögliche Konflikte machen zu müssen.
Eine weitere häufige Ursache für diesen Fehler ist das Vorhandensein ausstehender Ergebnisse von eine vorherige Anfrage. Wenn Sie mehrere Abfragen innerhalb einer Schleife ausführen, stellen Sie sicher, dass Sie mysqli_next_result() nach der Verarbeitung jedes Ergebnissatzes aufrufen. Diese Methode gibt alle verbleibenden Ergebnisse frei und bereitet die Verbindung für nachfolgende Abfragen vor.
Hier ist ein Beispiel, wie Sie den Fehler beheben können, indem Sie sowohl mysqli_free_result() als auch mysqli_next_result() aufrufen:
$stmt = $mysqli->prepare("SELECT id, username, password, firstname, lastname, salt FROM members WHERE email = ? LIMIT 1"); $stmt->bind_param('s', $loweredEmail); $stmt->execute(); $stmt->store_result(); $stmt->bind_result($user_id, $username, $db_password, $firstname, $lastname, $salt); $stmt->fetch(); $stmt->free_result(); $stmt->close(); while ($mysqli->more_results()) { $mysqli->next_result(); } $stmt1 = $mysqli->prepare("SELECT privileges FROM delegations WHERE id = ? LIMIT 1"); $stmt1->bind_param('s', $user_id); $stmt1->execute(); $stmt1->store_result(); $stmt1->bind_result($privileges); $stmt1->fetch();
By Durch die ordnungsgemäße Handhabung von Ergebnismengen und deren Freigabe, wenn sie nicht benötigt werden, können Sie den Fehler „Befehle nicht synchron“ vermeiden und eine nahtlose Ausführung mehrerer vorbereiteter Anweisungen sicherstellen.
Das obige ist der detaillierte Inhalt vonWarum erhalte ich die Fehlermeldung „Befehle nicht synchron', wenn ich mehrere vorbereitete PHP-MySQLi-Anweisungen verwende?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!