Heim  >  Artikel  >  Datenbank  >  Wie behebe ich den PHP-Fehler „Befehle nicht synchron' bei der Verwendung von MySQLi-vorbereiteten Anweisungen?

Wie behebe ich den PHP-Fehler „Befehle nicht synchron' bei der Verwendung von MySQLi-vorbereiteten Anweisungen?

Susan Sarandon
Susan SarandonOriginal
2024-11-20 14:04:17667Durchsuche

How to Resolve the PHP

Fehler bei nicht synchronen PHP-Befehlen: Ursachen und Lösung

Wenn Sie mit PHP und MySQLi arbeiten, um Daten aus einer Datenbank mithilfe vorbereiteter Anweisungen abzurufen, Möglicherweise tritt die Fehlermeldung „Befehle nicht synchron, Sie können den Befehl jetzt nicht ausführen“ auf. Dieses Problem tritt typischerweise auf, wenn versucht wird, mehrere vorbereitete Anweisungen innerhalb desselben PHP-Skripts auszuführen.

Der Fehler tritt auf, weil die query()-Methode von MySQLi bei Verwendung mit der Option MYSQLI_USE_RESULT nachfolgende Aufrufe in einem „veralteten“ Zustand belässt. Um dieses Problem zu lösen, ist es wichtig, die Ergebnisse der ersten Anweisung ordnungsgemäß zu verarbeiten, bevor mit der nächsten fortgefahren wird.

Eine Lösung besteht darin, mysqli_free_result() aufzurufen, nachdem jeder Ergebnissatz abgerufen wurde. Diese Funktion gibt alle ausstehenden Ergebnisse aus dem Puffer frei, sodass nachfolgende Anweisungen erfolgreich ausgeführt werden können.

Ein weiterer effektiver Ansatz ist die Verwendung von mysqli::next_result(). Rufen Sie nach der Ausführung jeder vorbereiteten Anweisung next_result() auf, um den internen Zeiger in MySQLi voranzutreiben und so eine ordnungsgemäße Synchronisierung für die nächste Anweisung sicherzustellen. Dies ist besonders relevant, wenn Sie mit gespeicherten Prozeduren oder mehreren Ergebnismengen arbeiten.

Hier ist ein Beispiel, das die Verwendung von next_result() demonstriert:

<?php

$mysqli = new mysqli('localhost', 'user', 'password', 'database');

// Prepare and execute first statement
$stmt1 = $mysqli->prepare("SELECT * FROM users WHERE username = ?");
$stmt1->bind_param('s', $username);
$stmt1->execute();
$stmt1->store_result();

// Free the result set and advance to the next result
$stmt1->free_result();
$mysqli->next_result();

// Prepare and execute second statement
$stmt2 = $mysqli->prepare("SELECT * FROM orders WHERE user_id = ?");
$stmt2->bind_param('i', $userId);
$stmt2->execute();
$stmt2->store_result();

// Bind results and fetch data
$stmt2->bind_result($orderId, $productId, $quantity);
while ($stmt2->fetch()) {
    // Do something with the fetched data
}

$stmt2->free_result();
$mysqli->close();

?>

Durch die Implementierung dieser Strategien können Sie das „ Fehler „Befehle nicht synchron“ und sorgen für eine reibungslose Ausführung mehrerer vorbereiteter Anweisungen in Ihren PHP-Skripten.

Das obige ist der detaillierte Inhalt vonWie behebe ich den PHP-Fehler „Befehle nicht synchron' bei der Verwendung von MySQLi-vorbereiteten Anweisungen?. 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