Aktueller Standort: Startseite> Neueste Artikel> 【MySQLI :: $ Affect_Rows】 Der Wert ist falsch nach dem Einfügen der Daten? Haben Sie diese gemeinsamen Missverständnisse vermieden?

【MySQLI :: $ Affect_Rows】 Der Wert ist falsch nach dem Einfügen der Daten? Haben Sie diese gemeinsamen Missverständnisse vermieden?

gitbox 2025-05-26

1. Grundnutzung von MySQLI :: $ betroffen_rows

 <?php
$mysqli = new mysqli("gitbox.net", "username", "password", "database");

$sql = "INSERT INTO users (username, email) VALUES ('testuser', '[email protected]')";
$mysqli->query($sql);

echo "Anzahl der betroffenen Zeilen:" . $mysqli->affected_rows;
?>

Im obigen Code werden neue Daten eingefügt und $ betroffene_rows sollten 1 zurückgeben, was darauf hinweist, dass eine Zeile eingefügt wird.


2. Häufige Missverständnisse und Lösungen

Missverständnis 1: Return 0 Nach dem Einfügen von Daten ist es offensichtlich erfolgreich erfolgreich

  • Ursache : Wenn Sie das Einfügen ausführen ... in der doppelten Schlüsselaktualisierungsanweisung und nicht tatsächlich Daten aktualisieren, können $ betroffene_rows je nach MySQL -Version 2 oder 0 zurückgeben.

  • Illustrieren :

    • In MySQL 5.1 und früher beträgt die Anzahl der Zeilen, die von der doppelten Schlüsselaktualisierung betroffen sind, 1 (Einfügen) oder 2 (Update).

    • Nach MySQL 5.7 wird 0 zurückgegeben, wenn keine Daten aktualisiert werden.

  • lösen :

    • Sie können $ mySQLI-> Informationen für Details überprüfen oder die Logik entsprechend Ihren Anforderungen anpassen.

Missverständnis 2: Bei der Ausführung mehrerer SQLs ist die Anzahl der betroffenen Zeilen ungenau

 <?php
$sql = "INSERT INTO users (username) VALUES ('user1');";
$sql .= "INSERT INTO users (username) VALUES ('user2');";

$mysqli->multi_query($sql);
do {
    if ($result = $mysqli->store_result()) {
        $result->free();
    }
    echo "Anzahl der betroffenen Zeilen:" . $mysqli->affected_rows . "\n";
} while ($mysqli->more_results() && $mysqli->next_result());
?>
  • HINWEIS : $ betroffene_rows ist eine Abfrage, die zum letzten Mal ausgeführt wurde. Wenn Sie mehrere Anweisungen in Stapeln ausführen, müssen Sie die Ergebnisse einzeln verarbeiten, um die Anzahl der betroffenen Zeilen für jede Anweisung genau zu erhalten.

Missverständnis 3: $ betroffene_rows ist ungültig für die ausgewählte Anweisung

  • $ betroffen_rows gilt nur für Schreibvorgänge (einfügen, aktualisieren, löschen). Die Auswahlanweisung betrifft keine Zeilenzahl und gibt -1 zurück.

  • Wenn Sie wissen möchten, wie viele Ergebnisse eine ausgewählte Abfrage zurückgegeben werden, sollten Sie $ result-> num_rows verwenden.


3. Andere Faktoren , die $ betroffene_rows beeinflussen

  • Transaktion nicht verpflichtet : Wenn die Transaktion aktiviert und nicht verpflichtet ist, spiegelt $ betroffene_rows immer noch die tatsächliche Anzahl der betroffenen Zeilen wider, die Daten werden jedoch nicht in die Datenbank verpflichtet.

  • Auswirkungen auf Auslöser : Die Änderung von Zeilen während der Ausführung von MySQL -Trigger ändert den Wert von $ betroffenen .

  • Verbindungsstatus : Stellen Sie sicher, dass die MySQLI -Verbindung normal ist.


4. Empfohlene Debugging -Fähigkeiten

  • Verwenden Sie $ MySQLI-> Fehler , um SQL-Fehler zu überprüfen.

  • Verwenden Sie $ MySQLI-> Info, um die Details der zuletzt ausgeführten Anweisung anzuzeigen.

  • Schalten Sie MySQL -Protokolle ein oder verwenden Sie Tools, um festzustellen, ob der ausgeführte SQL mit dem erwarteten übereinstimmt.


5. Zusammenfassung

MySQLI :: $ Affect_Rows ist ein effektives Instrument, um die Anzahl der Zeilen zu erkennen, die den Schreibvorgang beeinflussen. In den folgenden Situationen ist es jedoch leicht, verwirrt zu werden:

  • Bei der Verwendung komplexer SQL (z. B. auf doppelter Schlüsselaktualisierung ) sollte besondere Aufmerksamkeit auf die Rückgabewertregeln geschenkt werden.

  • Wenn mehrere SQL -Stapel ausgeführt werden, müssen die Ergebnisse einzeln verarbeitet werden.

  • Die Auswahlanweisung wirkt sich nicht auf die Anzahl der Zeilen aus. Verwenden Sie stattdessen $ result-> num_rows .

  • Transaktionen, Auslöser usw. können auch die tatsächliche Leistung beeinflussen.

Solange Sie das Arbeitsprinzip und die Randbedingungen verstehen, können $ betroffene_rows Ihnen helfen, den Datenbankbetriebseffekt genau zu beurteilen und die Code -Robustheit zu verbessern.