Heim >Datenbank >MySQL-Tutorial >Warum generiert mein MySQLi-Code den Fehler „Befehle nicht synchron'?

Warum generiert mein MySQLi-Code den Fehler „Befehle nicht synchron'?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-12-24 21:08:25457Durchsuche

Why Does My MySQLi Code Generate a

Warum gibt MySQL den Fehler „Befehle nicht synchron“ aus?

Wenn Sie versuchen, MySQL-Abfragen gleichzeitig auszuführen, kann der Fehler „Befehle nicht synchron“ auftreten . Dies geschieht, wenn der MySQL-Client erkennt, dass noch Zeilen aus einer laufenden Abfrage abgerufen werden müssen, während er versucht, eine neue auszuführen.

Fehlerursache

Der MySQL-Client verlangt, dass alle Zeilen abgerufen werden aus einer Abfrage abgerufen werden, bevor eine neue Abfrage initiiert wird. Dies verhindert Datenbeschädigungen und stellt sicher, dass der Status des Clients mit dem des Servers synchronisiert bleibt.

Problemlösung

1. Vorababrufen der Ergebnisse

Sie können mysqli_store_result() verwenden, um alle Zeilen aus der äußeren Abfrage abzurufen. Dadurch wird der MySQL-Client angewiesen, die Ergebnisse zu puffern, sodass Sie nachfolgende Abfragen ohne Störungen ausführen können.

2. Alle Ergebnisse abrufen

Alternativ können Sie mysqli_result::fetch_all() verwenden, das den vollständigen Ergebnissatz als PHP-Array zurückgibt. Dadurch können Sie das Array durchlaufen, ohne weitere Abfragen durchführen zu müssen.

Sonderfall: Gespeicherte Prozeduren

Gespeicherte Prozeduren können mehrere Ergebnismengen mit jeweils eigenen Zeilen zurückgeben. Um dieses Szenario zu bewältigen, sollten Sie mysqli_multi_query() verwenden. Diese Methode initiiert die gespeicherte Prozedur und durchläuft ihre Ergebnismengen, bis mysqli_next_result() nicht mehr verwendet wird.

Alternative zur hierarchischen Datenmodellierung

In Szenarien, in denen hierarchische Daten in einer flachen Tabelle dargestellt werden Erwägen Sie die Verwendung eines anderen Datenmodellierungsansatzes, um die Abfrage zu vereinfachen.

CodeIgnitor 3.0.3 Workaround für mysqli_next_result()

Für Personen, die CodeIgnitor 3.0.3 verwenden und bei denen dieser Fehler auftritt, gibt es in der Datei mysqli_driver.php eine Problemumgehung. Ändern Sie insbesondere in Zeile 262 die Methode _execute() wie folgt:

protected function _execute($sql)
{
    $results = $this->conn_id->query($this->_prep_query($sql));
    @mysqli_next_result($this->conn_id); // Fix 'command out of sync' error
    return $results;
}

Das obige ist der detaillierte Inhalt vonWarum generiert mein MySQLi-Code den Fehler „Befehle nicht synchron'?. 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