Aktueller Standort: Startseite> Neueste Artikel> Häufige Gründe, warum die Funktion PHP Next_Result () false zurückgibt

Häufige Gründe, warum die Funktion PHP Next_Result () false zurückgibt

gitbox 2025-04-29

Bei der Verwendung von PHP -Erweiterung von PHP für Datenbankvorgänge wird die Funktion Next_Result () häufig verwendet, um Abfragen zu verarbeiten, die mehrere Ergebnissätze enthalten (z. B. Multi_query () -Anrufe, die mehrere SQL -Anweisungen ausführen). Entwickler stellen jedoch manchmal fest, dass die Funktion falsch zurückgibt, was dazu führen kann, dass nachfolgende Ergebnissätze nicht verfügbar sind. Was sind die Gründe, warum Next_result () falsch zurückgibt? Wie kann man es beheben und es lösen?

Dieser Artikel wird dieses Problem im Detail analysieren.

1. Was ist Next_result () ?

MySQLI :: Next_Result () ist eine Methode, mit der zum nächsten Ergebnis -Set mit Multi_query () verwendet wird. Normalerweise müssen bei der Ausführung von Abfragen mit mehreren Statementen sie verwendet werden, um jedes Ergebnis einzeln zu erhalten.

Basisnutzungsbeispiele:

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

$sql = "SELECT * FROM users; SELECT * FROM orders;";
if ($mysqli->multi_query($sql)) {
    do {
        if ($result = $mysqli->store_result()) {
            while ($row = $result->fetch_assoc()) {
                print_r($row);
            }
            $result->free();
        }
    } while ($mysqli->next_result());
} else {
    echo "Query Error: " . $mysqli->error;
}

2. Häufige Gründe, warum Next_result () falsch zurückgibt

1. Keine Ergebnissätze mehr

Der häufigste Grund ist, dass alle Ergebnissätze gelesen wurden . Zu diesem Zeitpunkt wird der Anruf als Next_Result () falsch zurückgegeben und "keine Ergebnisse mehr" angibt.

Lösung: Steuern Sie einfach die Zyklusbeendigungsbedingungen vernünftigerweise, es ist keine zusätzliche Verarbeitung erforderlich.

2. In der vorherigen Abfrage trat ein Fehler auf

Wenn eine der von Multi_Query () ausgeführten SQL-Anweisungen fehlschlägt, gibt Next_Result () FALSE zurück, und $ mysqli-> Fehler hat spezifische Fehlerinformationen.

Beispiel:

 $sql = "SELECT * FROM valid_table; SELECT * FROM invalid_table;";
if ($mysqli->multi_query($sql)) {
    do {
        if ($result = $mysqli->store_result()) {
            // Verarbeitungsergebnisse
            $result->free();
        } else {
            if ($mysqli->errno) {
                echo "Error: " . $mysqli->error;
                break;
            }
        }
    } while ($mysqli->next_result());
}

3.. Ich habe vergessen, das vorherige Ergebnissatz aufzuräumen

Wenn der vorherige Ergebnissatz nicht korrekt freigegeben wird oder nicht explizit durch store_result () extrahiert wird, kann dies zu Problemen mit Next_Result () führen, insbesondere in älteren Versionen von PHP oder MySQL.

Vorschlag: Immer $ result-> Free () oder $ mySQLi-> store_result (), auch wenn Sie den Ergebnisinhalt nicht verarbeiten.

4.. Es gibt Syntaxfehler oder illegale Aussagen zwischen SQL -Anweisungen

Multi_query () unterstützt mehrere Aussagen, unterstützt jedoch keine Anweisungskombinationen aller Typen. Beispielsweise kann die Ausführung bestimmter DDL -Anweisungen (z. B. Erstellen von Verfahren ) im strengen Modus eingeschränkt werden.

Vorschlag: Stellen Sie sicher, dass alle Aussagen legal sind und $ MySQLI-> Fehler bei Bedarf zur Fehlerbehebung verwenden.

3.. Fehlerbehebung und Debugging -Fähigkeiten

  1. Verwenden Sie ERROR_REPORTING (E_ALL) , um alle Fehleranforderungen zu aktivieren.

  2. Überprüfen Sie $ MySQLI-> Errno und $ MySQLI-> Fehler für detaillierte Fehlerinformationen.

  3. Protokollierung: Schreiben Sie jeden weiteren NEXT_RESULT () Rückgabewert und Fehlerausgabe in das Protokoll, um eine einfache Fehlerbehebung zu erhalten.

  4. Verwenden Sie MySQLI_More_Results (), um festzustellen, ob noch ein Ergebnissatz vorhanden ist:

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

Iv. Ein vollständiges Beispiel

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

$sql = "SELECT * FROM users; SELECT * FROM orders WHERE order_date > '2024-01-01'";
if ($mysqli->multi_query($sql)) {
    do {
        if ($result = $mysqli->store_result()) {
            while ($row = $result->fetch_assoc()) {
                echo "Daten: " . implode(", ", $row) . "<br>";
            }
            $result->free();
        } else {
            if ($mysqli->errno) {
                echo "Fehler: " . $mysqli->error . "<br>";
            }
        }
    } while ($mysqli->more_results() && $mysqli->next_result());
} else {
    echo "Erste Anfrage fehlgeschlagen:" . $mysqli->error;
}

5. Referenzverbindung