Heim > Backend-Entwicklung > PHP-Tutorial > Warum erhalte ich in PHP bei MySQL-Abfragen den Fehler „Befehle nicht synchron'?

Warum erhalte ich in PHP bei MySQL-Abfragen den Fehler „Befehle nicht synchron'?

Susan Sarandon
Freigeben: 2024-12-19 21:28:16
Original
190 Leute haben es durchsucht

Why Do I Get a

Fehler „Befehle nicht synchron“ im PHP-Code mit MySQL-Abfragen

Beim Ausführen eines PHP-Skripts, das mehrere MySQL-Abfragen mit mysqli umfasst, Es kann ein Fehler auftreten: „Befehle nicht synchron; Sie können diesen Befehl jetzt nicht ausführen.“ Dieses Problem tritt auf, wenn nachfolgende Abfragen versucht werden, bevor die Ergebnisse der vorherigen Abfrage abgerufen und verarbeitet oder der Cache des MySQL-Servers mit Abfragebefehlen gelöscht werden.

Der in der Frage bereitgestellte Code führt zwei Abfragen aus: eine zum Zählen von Datensätzen und eine andere um Zeilen basierend auf einer Suchzeichenfolge abzurufen. Bevor jedoch die Ergebnisse der ersten Abfrage abgerufen werden, wird die zweite Abfrage ausgeführt. Dies löst den Fehler „Asynchron“ aus.

Fehlerursachen

  • Ungepufferte Abfragen: MySQLI verwendet standardmäßig ungepufferte Abfragen für vorbereitete Abrechnungen, d. h. die Ergebnisse werden in Teilen gestreamt, sobald sie verfügbar sind. Wenn eine nachfolgende Abfrage versucht wird, bevor die Ergebnisse der ersten Abfrage gepuffert werden, können Befehle nicht mehr synchron sein und zu dem Fehler führen.
  • Unvollständige Abfrageausführung: Wenn mehrere Abfragen versucht werden, ohne die ordnungsgemäß zu verarbeiten Dadurch können sich unvollständige Befehle im Cache des Servers ansammeln. Dies kann nachfolgende Abfragen stören und den Fehler verursachen.

Mögliche Lösungen

  • Ergebnisse puffern: Um diesen Fehler zu vermeiden, Verwenden Sie $stmt->store_result(), um die Ergebnisse der Abfrage zu puffern, bevor Sie die nächste ausführen. Rufen Sie die gepufferten Ergebnisse mit $stmt->fetch() ab und leeren Sie dann den Cache des Servers mit $stmt->free_result().
  • Erste Abfrageergebnisse abrufen: Alternativ können Sie alle abrufen Ergebnisse der ersten Abfrage in ein Array. Dadurch werden die Ergebnisse verbraucht und die Ausführung nachfolgender Abfragen ohne Beeinträchtigung durch nicht abgerufene Ergebnisse ermöglicht.
  • Transaktionen verwenden: Wenn mehrere Abfragen zusammenhängen und nacheinander ausgeführt werden müssen, sollten Sie die Verwendung von Transaktionen zur Abwicklung des Prozesses in Betracht ziehen als einzelnes Atom Einheit.

Beispiel

Hier ist ein Beispiel für die Pufferung der ersten Abfrageergebnisse mit $stmt->store_result():

<?php
$con = mysqli_connect("localhost", "user", "password", "db");
$brand ="o";
$countQuery = "SELECT ARTICLE_NO FROM AUCTIONS WHERE upper(ARTICLE_NAME) LIKE % ? %";
$con->query("SET NAMES 'utf8'");
if ($numRecords = $con->prepare($countQuery)) {
    $numRecords->bind_param("s", $brand);
    $numRecords->execute();
    $numRecords->store_result(); // Buffer the results
    $data = $con->query($countQuery) or die(print_r($con->error));
    $rowcount = $data->num_rows;
}
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonWarum erhalte ich in PHP bei MySQL-Abfragen den Fehler „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