Fehler bei nicht synchronen PHP-Befehlen: Ursachen und Lösung
Wenn Sie mit PHP und MySQLi arbeiten, um Daten aus einer Datenbank mithilfe vorbereiteter Anweisungen abzurufen, Möglicherweise tritt die Fehlermeldung „Befehle nicht synchron, Sie können den Befehl jetzt nicht ausführen“ auf. Dieses Problem tritt typischerweise auf, wenn versucht wird, mehrere vorbereitete Anweisungen innerhalb desselben PHP-Skripts auszuführen.
Der Fehler tritt auf, weil die query()-Methode von MySQLi bei Verwendung mit der Option MYSQLI_USE_RESULT nachfolgende Aufrufe in einem „veralteten“ Zustand belässt. Um dieses Problem zu lösen, ist es wichtig, die Ergebnisse der ersten Anweisung ordnungsgemäß zu verarbeiten, bevor mit der nächsten fortgefahren wird.
Eine Lösung besteht darin, mysqli_free_result() aufzurufen, nachdem jeder Ergebnissatz abgerufen wurde. Diese Funktion gibt alle ausstehenden Ergebnisse aus dem Puffer frei, sodass nachfolgende Anweisungen erfolgreich ausgeführt werden können.
Ein weiterer effektiver Ansatz ist die Verwendung von mysqli::next_result(). Rufen Sie nach der Ausführung jeder vorbereiteten Anweisung next_result() auf, um den internen Zeiger in MySQLi voranzutreiben und so eine ordnungsgemäße Synchronisierung für die nächste Anweisung sicherzustellen. Dies ist besonders relevant, wenn Sie mit gespeicherten Prozeduren oder mehreren Ergebnismengen arbeiten.
Hier ist ein Beispiel, das die Verwendung von next_result() demonstriert:
<?php $mysqli = new mysqli('localhost', 'user', 'password', 'database'); // Prepare and execute first statement $stmt1 = $mysqli->prepare("SELECT * FROM users WHERE username = ?"); $stmt1->bind_param('s', $username); $stmt1->execute(); $stmt1->store_result(); // Free the result set and advance to the next result $stmt1->free_result(); $mysqli->next_result(); // Prepare and execute second statement $stmt2 = $mysqli->prepare("SELECT * FROM orders WHERE user_id = ?"); $stmt2->bind_param('i', $userId); $stmt2->execute(); $stmt2->store_result(); // Bind results and fetch data $stmt2->bind_result($orderId, $productId, $quantity); while ($stmt2->fetch()) { // Do something with the fetched data } $stmt2->free_result(); $mysqli->close(); ?>
Durch die Implementierung dieser Strategien können Sie das „ Fehler „Befehle nicht synchron“ und sorgen für eine reibungslose Ausführung mehrerer vorbereiteter Anweisungen in Ihren PHP-Skripten.
Das obige ist der detaillierte Inhalt vonWie behebe ich den PHP-Fehler „Befehle nicht synchron' bei der Verwendung von MySQLi-vorbereiteten Anweisungen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!