Beim Ausführen mehrerer vorbereiteter Anweisungen in PHP/MySQLi kann der Fehler „Befehle nicht synchron“ auftreten. Dies ist auf eine Diskrepanz zwischen der Anzahl der ausgeführten Anweisungen und der Anzahl der verarbeiteten Ergebnisse zurückzuführen. Um dieses Problem zu beheben, ziehen Sie die folgenden Erkenntnisse und Lösungen in Betracht:
Der Fehler „Out of Sync“ tritt auf, wenn der MySQL-Client mehr Daten empfängt als erwartet für eine bestimmte Anweisung. Dies geschieht, wenn mysqli::query mit dem Flag MYSQLI_USE_RESULT verwendet wird. Dieses Flag weist MySQL an, die Ergebnisse nicht vollständig zu puffern, was dazu führt, dass nachfolgende Befehle nicht synchron sind.
In Ihrem bereitgestellten Code werden zwei vorbereitete Anweisungen verwendet, um Daten aus dem abzurufen Datenbank. Die erste Anweisung ruft Benutzerinformationen ab, während die zweite Privilegien abruft. Der Fehler tritt jedoch beim Ausführen der zweiten Anweisung auf.
Um den Fehler zu beheben, müssen Sie die Ergebnisse der ersten Anweisung freigeben, bevor Sie die zweite ausführen. Dies wird durch den Aufruf der Funktion mysqli_stmt->free_result() erreicht. Darüber hinaus stellt der Aufruf von mysqli->next_result() nach jeder Abfrage sicher, dass alle zusätzlichen Ergebnisse verarbeitet wurden.
Hier ist ein Beispiel für die Lösung des Problems:
$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(); $mysqli->next_result(); // Ensure no stray results are present $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();
Das obige ist der detaillierte Inhalt vonPHP MySQLi-Fehler „Befehle nicht synchron“: Wie kann ich ihn beheben?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!