Heim > Backend-Entwicklung > PHP-Tutorial > Warum erhalte ich bei MySQL-vorbereiteten Anweisungen in PHP die Fehlermeldung „Befehle nicht synchron'?

Warum erhalte ich bei MySQL-vorbereiteten Anweisungen in PHP die Fehlermeldung „Befehle nicht synchron'?

Mary-Kate Olsen
Freigeben: 2024-12-23 07:57:48
Original
154 Leute haben es durchsucht

Why Am I Getting a

Befehle nicht synchron, MySQL-Vorbereitungsanweisungsproblem

Beim Versuch, zwei MySQL auszuführen, tritt die Fehlermeldung „Befehle nicht synchron“ auf Abfragen mit MySQLi und PHP. Dieser Fehler tritt auf, wenn mehrere ungepufferte Abfragen ausgeführt werden und Befehle nicht in der richtigen Reihenfolge ausgeführt werden.

In Ihrem Code haben Sie zwei Abfragen vorbereitet: $countQuery und $recordsQuery. Standardmäßig verwendet MySQL jedoch ungepufferte Abfragen für vorbereitete Anweisungen. Das bedeutet, dass Ergebnisse für jede Abfrage abgerufen werden müssen, bevor die nächste Abfrage ausgeführt wird.

Fehlerursache

Ihr Code versucht, $recordsQuery innerhalb der Schleife von $ auszuführen countQuery. Da die Ergebnisse von $countQuery nicht abgerufen werden, behandelt mysqli dies als ungepufferte Abfrage und führt $recordsQuery in der falschen Reihenfolge aus. Dies verursacht den Fehler „Befehle nicht synchron“.

Lösung

Um dieses Problem zu beheben, haben Sie zwei Möglichkeiten:

  • Ergebnisse der ersten Abfrage abrufen:Ergebnisse von $countQuery in ein Array abrufen mit $numRecords->get_result(). Dadurch werden die Ergebnisse gepuffert und Sie können $recordsQuery anschließend ausführen.
  • Verwenden Sie mysqli store_result(): Alternativ können Sie die Methode $stmt->store_result() verwenden, bevor Sie Ergebnisse abrufen . Dadurch werden die Ergebnisse intern gepuffert, ohne dass ein zusätzliches Array erforderlich ist.

Beispiel mit store_result()

if ($numRecords = $con->prepare($countQuery)) {
    $numRecords->bind_param("s", $brand);
    $numRecords->execute();
    $numRecords->store_result(); // Buffer the query results
    $data = $con->query($countQuery) or die(print_r($con->error));
    $rowcount = $data->num_rows;
    // Continue with your code...
Nach dem Login kopieren

Hinweis:

Wenn Sie $countQuery zum Zählen von Zeilen vor $recordsQuery verwenden, stellen Sie sicher, dass Sie das Ergebnis von $countQuery mit freigeben $numRecords->free_result() vor der Ausführung von $recordsQuery. Dies ist nicht erforderlich, wenn Sie store_result.

verwenden

Das obige ist der detaillierte Inhalt vonWarum erhalte ich bei MySQL-vorbereiteten Anweisungen in PHP die Fehlermeldung „Befehle nicht synchron'?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage