Heim  >  Artikel  >  Datenbank  >  PHP MySQLi-Fehler „Befehle nicht synchron“: Wie kann ich ihn beheben?

PHP MySQLi-Fehler „Befehle nicht synchron“: Wie kann ich ihn beheben?

Barbara Streisand
Barbara StreisandOriginal
2024-11-18 10:03:02921Durchsuche

PHP MySQLi

Fehler „PHP-Befehle nicht synchron“: Verständnis und Lösung

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:

Ursache des Fehlers

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.

Code-Snippet-Erklärung

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.

Lösung

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();

Zusätzliche Tipps

  • Verwenden Sie separate Objekte für jede vorbereitete Anweisung, um Verwirrung zu vermeiden.
  • Überprüfen Sie nach der Ausführung einer Anweisung immer mit mysqli_stmt->error auf Fehler.
  • Verwenden Sie MYSQLI_USE_RESULT nicht, es sei denn Dies ist notwendig, da es zu Synchronisierungsproblemen kommen kann.

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn