Aktueller Standort: Startseite> Neueste Artikel> So capsulieren Sie Next_Result () und Multi-Reult-Verarbeitung als allgemeine Funktionen

So capsulieren Sie Next_Result () und Multi-Reult-Verarbeitung als allgemeine Funktionen

gitbox 2025-05-02

In der tatsächlichen Entwicklung, insbesondere bei Verwendung der MySQL-Multi-Quer-Funktion, begegnen Sie häufig Situationen, in denen mehrere Ergebnissätze verarbeitet werden müssen. Wenn es keine einheitliche Verarbeitungsmethode gibt, ist es nicht nur schwierig, manuell als Next_Result () und Store_Result () aufzurufen, sondern auch anfällig für Fehler.
Um den Code eleganter und robuster zu gestalten, können wir eine allgemeine Funktion zusammenschließen und alle Ergebnissätze automatisch verarbeiten. Als nächstes werde ich Sie Schritt für Schritt durchführen.

Verstehen Sie die Verarbeitung von Next_Result () und Multi-Result-Sätzen

Bei Verwendung von MySQLI für mehrere Abfragen (d. H. Senden mehrerer SQL -Anweisungen gleichzeitig) entspricht jede Anweisung einem Ergebnissatz. Verwenden Sie Next_Result () , um das MySQLI -Objekt in das nächste Ergebnissatz zu verschieben, während Store_Result () für das Extrahieren der Daten aus dem aktuellen Ergebnissatz verantwortlich ist.

Wenn diese Ergebnissätze nicht korrekt verarbeitet werden, ist es einfach, Verbindungsausnahmen zu verursachen, oder die nächste Abfrage schlägt fehl. Daher ist es sehr wichtig, alle Ergebnissätze vollständig aufzuräumen .

Kapitulieren Sie eine allgemeine Multi-Reult-Verarbeitungsfunktion

Hier ist ein Beispiel, das zeigt, wie Sie eine Funktion zusammenfassen, die alle Ergebnissätze verarbeitet und ein Array aller Daten zurückgibt:

 <?php

/**
 * Führen Sie mehrere Abfragen aus und verarbeiten Sie alle Ergebnissätze
 *
 * @param mysqli $mysqli MySQLiObjekte verbinden
 * @param string $multiQuery Mehrere Elemente, die ausgeführt werden sollenSQLAbfrageanweisung(Getrennt mit Semikolonen)
 * @return array Gibt ein Array zurück, das alle Ergebnisdaten enthält
 */
function executeMultiQuery(mysqli $mysqli, string $multiQuery): array
{
    $allResults = [];

    if ($mysqli->multi_query($multiQuery)) {
        do {
            if ($result = $mysqli->store_result()) {
                $data = [];
                while ($row = $result->fetch_assoc()) {
                    $data[] = $row;
                }
                $allResults[] = $data;
                $result->free();
            } else {
                // Das aktuelle Ergebnis kann ohne Ergebnis festgelegt sein,Zum BeispielUPDATEoderINSERT
                if ($mysqli->errno) {
                    throw new Exception("MySQLFehler:" . $mysqli->error);
                }
                $allResults[] = null;
            }
        } while ($mysqli->more_results() && $mysqli->next_result());
    } else {
        throw new Exception("Mehrere Abfragen sind fehlgeschlagen:" . $mysqli->error);
    }

    return $allResults;
}

// Beispiel Verwendung
$mysqli = new mysqli('localhost', 'root', 'password', 'testdb');

if ($mysqli->connect_errno) {
    die("Verbindung ist fehlgeschlagen:" . $mysqli->connect_error);
}

try {
    $sql = "
        SELECT * FROM users;
        SELECT * FROM orders;
        UPDATE products SET stock = stock - 1 WHERE id = 5;
    ";
    $results = executeMultiQuery($mysqli, $sql);

    // Alle Abfrageergebnisse ausgeben
    foreach ($results as $index => $resultSet) {
        echo "1. " . ($index + 1) . " Ein Ergebnissatz:<br>";
        if (is_array($resultSet)) {
            foreach ($resultSet as $row) {
                echo htmlspecialchars(json_encode($row)) . "<br>";
            }
        } else {
            echo "(Kein Rückgabergebnis,Zum BeispielUPDATEoderINSERTStellungnahme)<br>";
        }
        echo "<hr>";
    }
} catch (Exception $e) {
    echo "发生Fehler:" . $e->getMessage();
}

$mysqli->close();
?>

Dinge zu beachten

  1. Lösen Sie die Ressourcen für die Ergebnisressourcen rechtzeitig : Es ist sehr wichtig, $ result-> Free () aufzurufen, um Speicherleckage zu vermeiden.

  2. Fehlererkennung : Wenn multi_query () oder eine bestimmte Runde von Store_Result () Fehler auftritt, sollte die Ausnahme rechtzeitig erfasst werden, um weitere Fehler in nachfolgenden Operationen zu vermeiden.

  3. Anpassung an Operationen ohne Ergebnissätze : Aktualisieren , Einfügen , Löschen und andere Aussagen geben die Ergebnismenge nicht zurück, und während der Verarbeitung sind spezielle Urteile erforderlich.

Abschluss

Durch die Einkapselung und Verarbeitung mehrerer Ergebnissessätze machen wir den Code nicht nur prägnanter, sondern vermeiden auch das Problem des MySQL -Verbindungschaos effektiv. Wenn Ihr Projekt häufig mehrere SQL -Abfragen verarbeiten muss, wird dringend empfohlen, eine ähnliche Methode für die standardisierte Kapselung anzuwenden.

Wenn Sie mehr über die erweiterte Verwendung von Multi-Querien erfahren möchten, z. B. Transaktion in Kombination mit Multi-Querien oder der Integration einer solchen Einkapselung in große Projekte, können Sie weiterhin unserer Website folgen: https://gitbox.net ! ?