Aktueller Standort: Startseite> Neueste Artikel> 【MySQLI :: $ Affect_Rows】 Vorsichtsmaßnahmen für die Verwendung in Multi-Query (multi_query)

【MySQLI :: $ Affect_Rows】 Vorsichtsmaßnahmen für die Verwendung in Multi-Query (multi_query)

gitbox 2025-05-28

Bei der Verwendung von PHP -Erweiterung von PHP für Datenbankvorgänge können wir mit der Multi_Query -Funktion mehrere SQL -Anweisungen gleichzeitig ausführen, was beim Stapeldaten sehr bequem ist. Nach der Ausführung mehrerer Aussagen ist jedoch eine gemeinsame Frage geworden, wie die betroffene Anzahl von Zeilen ( betroffene_Rows ) korrekt abgerufen werden kann.

Dieser Artikel kombiniert das Attribut von MySQLI :: $ Affection_rows, um zu erklären, wie es korrekt verwendet werden kann, und Probleme, die im Szenario multi_query geachtet werden müssen.


1. Grundnutzung von MySQLI :: $ betroffen_rows

MySQLI :: $ Affect_Rows ist ein Attribut des MySQLI -Objekts, das die Anzahl der Zeilen angibt, die durch die neueste Ausführung von Anweisungen einfügen , aktualisieren oder gelöscht werden . Eine einzelne SQL -Anweisung ist sehr intuitiv auszuführen:

 $mysqli = new mysqli('gitbox.net', 'user', 'password', 'database');
$mysqli->query("UPDATE users SET status=1 WHERE last_login > NOW() - INTERVAL 30 DAY");
echo "Anzahl der betroffenen Zeilen: " . $mysqli->affected_rows;

Nach Ausführung dieser Aktualisierungsanweisung ist betroffene_rows die Anzahl der betroffenen Zeilen.


2. Die Beziehung zwischen Multi_Query und Betroffenen_Rows

Mit Multi_Query können mehrere SQL -Anweisungen gleichzeitig ausgeführt werden:

 $sql = "UPDATE users SET status=1 WHERE id=1;";
$sql .= "UPDATE users SET status=2 WHERE id=2;";
$mysqli->multi_query($sql);

Aber was wird der Wert der betroffenen_rows zu diesem Zeitpunkt sein? Die Antwort lautet: betroffen_rows spiegelt nur die Anzahl der betroffenen Zeilen wider, die dem derzeit verarbeiteten Ergebnis entsprechen. Da Multi_Query die Ergebnisse jeder Aussage durchlaufen muss, muss sie nacheinander abgerufen werden.


3.. Erhalten Sie für jede Anweisung in Multi_Query korrekt betroffene_Rows

Beispielcode:

 $mysqli = new mysqli('gitbox.net', 'user', 'password', 'database');

$sql = "UPDATE users SET status=1 WHERE id=1;";
$sql .= "UPDATE users SET status=2 WHERE id=2;";
$sql .= "DELETE FROM logs WHERE created_at < NOW() - INTERVAL 30 DAY;";

if ($mysqli->multi_query($sql)) {
    do {
        // Holen Sie sich die Anzahl der betroffenen Zeilen für das aktuelle Ergebnis
        echo "Anzahl der betroffenen Zeilen: " . $mysqli->affected_rows . "\n";

        // Bereiten Sie sich darauf vor, das nächste Ergebnis zu verarbeiten
    } while ($mysqli->more_results() && $mysqli->next_result());
} else {
    echo "Ausführung fehlgeschlagen: " . $mysqli->error;
}

Hier verwenden wir das DO ... während Schleifen, um Aussagen einzeln zu verarbeiten. Nach jeder Ausführung lesen wir die aktuellen Betroffenen , um die Anzahl der von jeder Anweisung betroffenen Zeilen genau zu erhalten.


4.. Mehrere Probleme, auf die Sie bei der Verwendung betroffener_rows achten sollten

  1. Multi_Query muss verwendet werden, um mit Next_Result () zusammenzuarbeiten, um die Ergebnisse einzeln zu durchlaufen <br> Wenn Sie Next_Result () nicht anrufen, können Sie sich nur von der ersten Anweisung betroffen lassen, und die nachfolgenden Aussagen werden ignoriert.

  2. Einige Aussagen beeinflussen möglicherweise nicht die Anzahl der Zeilen <br> Beispielsweise gibt die Auswahlanweisung -1 zurück . Nur gültig für Anweisungen, die Daten ändern.

  3. Betroffene_rows können -1 sein, wenn ein Fehler auftritt
    Wenn die SQL -Anweisung nicht ausgeführt wird, gibt betroffene_rows -1 zurück. Zu diesem Zeitpunkt müssen Sie die Fehlermeldung über $ MySQLI-> Fehler erhalten.

  4. Achten Sie beim Abwickeln von Transaktionen <br> auf Konsistenz Wenn in einer Transaktion mehrere Aussagen ausgeführt werden, können die betroffenen Abläufe einer einzelnen Anweisung den Gesamtschließungszustand der Transaktion nicht garantieren und müssen basierend auf dem Transaktionsausschuss und Rollback kontrolliert werden.


5. Zusammenfassung

  • Wenn Multi_Query mehrere SQLs ausführt, muss eine Schleife verwendet werden, um mit Next_Result () zusammenzuarbeiten, um alle Ergebnisse zu durchqueren.

  • Nach der Ausführung jeder Anweisung ist betroffene_rows die Anzahl der betroffenen Zeilen der aktuellen Anweisung.

  • Achten Sie auf den Erkennung des Fehlerstatus und den Rückgabewert von Sonderaussagen für betroffene_Rows .

  • Bei der Durchführung einer Transaktion ist die Anzahl der betroffenen Zeilen nur ein Hilfsurteil, und der endgültige Zustand unterliegt dem Ergebnis des Transaktionsausschusses.

Durch das Beherrschen der oben genannten Punkte können Sie MySQLI :: $ Affection_rows und Multi_Query korrekt und effizient verwenden, um mehrere SQL -Ausführungen und -ergebnisverarbeitung durchzuführen.