Heim > Datenbank > MySQL-Tutorial > Hauptteil

Warum erhalte ich die Fehlermeldung „Befehle nicht synchron', wenn ich mehrere vorbereitete PHP-MySQLi-Anweisungen verwende?

Patricia Arquette
Freigeben: 2024-11-21 07:32:11
Original
601 Leute haben es durchsucht

Why Do I Get

PHP-Befehle nicht synchron: Beheben des Fehlers bei der Verwendung mehrerer vorbereiteter Anweisungen

In PHP, wenn versucht wird, mehrere vorbereitete Anweisungen mit MySQLi auszuführen , kann es zu der Fehlermeldung „Befehle nicht synchron, Sie können den Befehl jetzt nicht ausführen“ kommen. Dieser Fehler tritt aufgrund der Standardverarbeitung von Ergebnismengen aus Abfragen durch MySQLi auf.

Eine mögliche Ursache für diesen Fehler ist die Verwendung von MYSQLI_USE_RESULT beim Ausführen der Abfrage. Dieser Modus optimiert die Leistung, indem er die Pufferung des gesamten Ergebnissatzes vermeidet. Allerdings ist es erforderlich, dass Sie das Ergebnis manuell mit mysqli_free_result() freigeben. Wenn Sie dies nicht tun, bevor Sie nachfolgende Anweisungen ausführen, ist die Befehlssequenz nicht mehr synchron.

Um dieses Problem zu beheben, stellen Sie sicher, dass Sie mysqli_free_result() aufrufen, nachdem Sie alle Zeilen aus jeder Anweisung abgerufen haben. Alternativ können Sie die Methode „store_result()“ verwenden, um den gesamten Ergebnissatz im Speicher zu speichern, sodass Sie später darauf zugreifen können, ohne sich Gedanken über mögliche Konflikte machen zu müssen.

Eine weitere häufige Ursache für diesen Fehler ist das Vorhandensein ausstehender Ergebnisse von eine vorherige Anfrage. Wenn Sie mehrere Abfragen innerhalb einer Schleife ausführen, stellen Sie sicher, dass Sie mysqli_next_result() nach der Verarbeitung jedes Ergebnissatzes aufrufen. Diese Methode gibt alle verbleibenden Ergebnisse frei und bereitet die Verbindung für nachfolgende Abfragen vor.

Hier ist ein Beispiel, wie Sie den Fehler beheben können, indem Sie sowohl mysqli_free_result() als auch mysqli_next_result() aufrufen:

$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();
$stmt->close();

while ($mysqli->more_results()) {
    $mysqli->next_result();
}

$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();
Nach dem Login kopieren

By Durch die ordnungsgemäße Handhabung von Ergebnismengen und deren Freigabe, wenn sie nicht benötigt werden, können Sie den Fehler „Befehle nicht synchron“ vermeiden und eine nahtlose Ausführung mehrerer vorbereiteter Anweisungen sicherstellen.

Das obige ist der detaillierte Inhalt vonWarum erhalte ich die Fehlermeldung „Befehle nicht synchron', wenn ich mehrere vorbereitete PHP-MySQLi-Anweisungen verwende?. 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