Aktueller Standort: Startseite> Neueste Artikel> Wenn Sie einen Aktualisierungsvorgang durchführen und vergessen zu überprüfen, ob es übereinstimmende Zeilen gibt, welche Auswirkungen haben sie den Wert von MySQLI :: $ Affection_rows?

Wenn Sie einen Aktualisierungsvorgang durchführen und vergessen zu überprüfen, ob es übereinstimmende Zeilen gibt, welche Auswirkungen haben sie den Wert von MySQLI :: $ Affection_rows?

M66 2025-06-29

Bei Verwendung der MySQLI -Erweiterung von PHP für Datenbankvorgänge ist die Update -Anweisung eine der am häufigsten verwendeten SQL -Operationen. Viele Entwickler ignorieren jedoch häufig ein Schlüsseldetail bei der Durchführung von Aktualisierungsvorgängen : Bevor sie Updates durchführen, überprüfen sie nicht, ob es tatsächlich einen passenden Datensatz gibt. Diese Unwissenheit wirkt sich direkt auf den Wert des Attributs von MySQLI :: $ Affection_rows aus, was zu Programmlogikfehlern oder abnormalem Verhalten führen kann.

1. Definition und Funktion von MySQLI :: $ betroffen_rows

In MySQLI gibt $ mysqli-> betroffen_rows die Anzahl der betroffenen Zeilen jedes Mal zurück, wenn eine Datenmodifizierungsoperation (z. B. Einfügen , Aktualisieren oder Löschen ). Dieser Wert wird in vielen Anwendungsszenarien verwendet, um festzustellen, ob der Vorgang erfolgreich ist oder zum Aufzeichnen des Betriebsprotokolls usw. verwendet wird.

Zum Beispiel:

<Code> $ mysqli = new MySQLI ("localhost", "user", "pass", "database");

$ mysqli-> query ("Benutzer aktualisieren Setzen Sie Status = 'Active', wobei last_login <jetzt () - Intervall 30 Tage");

echo $ mysqli-> betroffen_rows;
</code>

Dieser Code gibt die Anzahl der betroffenen Zeilen aus, dh die Anzahl der Benutzer, die den Status erfolgreich aktualisiert haben.

2. Verhalten, wenn es keine passende Zeile gibt

$ mysqli-> betroffen_rows gibt 0 zurück, wenn die ausgeführte Update- Anweisung keine Datensätze übereinstimmt. Dies liegt daran, dass keine Datensätze geändert werden, unabhängig davon, ob die Syntax korrekt ist oder ob SQL erfolgreich ausgeführt wird, die Anzahl der betroffenen Zeilen bleibt 0.

HINWEIS: Selbst wenn die SQL -Anweisungssyntax vollständig korrekt ist, ist betroffene_rows immer noch 0, wenn die Bedingung keine Daten erreicht. Dies bedeutet nicht, dass die SQL -Ausführung fehlgeschlagen ist.

Zum Beispiel:

<Code> $ mysqli = new MySQLI ("localhost", "user", "pass", "database");

$ mysqli-> query ("Benutzer aktualisieren Setzen Sie Status = 'Active' wobei ID = 999999");

echo $ mysqli-> betroffen_rows;
</code>

Unter der Annahme, dass der Benutzer mit ID = 99999 nicht existiert, wird die Ausgabe 0 sein, was darauf hinweist, dass kein Datensatz aktualisiert wurde.

3. Wenn sich die Daten nicht geändert haben

Darüber hinaus gibt es eine andere Situation, die leicht missverstanden wird: Auch wenn ein Datensatz übereinstimmt, wird der aktualisierte Wert mit dem ursprünglichen Wert nicht in die Anzahl der betroffenen Zeilen gezählt.

Zum Beispiel:

<Code> $ mysqli = new MySQLI ("localhost", "user", "pass", "database");

$ mysqli-> query ("Benutzer aktualisieren setze status = 'aktiv' wobei status = 'active'");

echo $ mysqli-> betroffen_rows;
</code>

Obwohl in diesem Code viele Zeilen übereinstimmen können, erfolgt das Statusfeld bereits "aktiv" , aber es erfolgt keine tatsächliche Aktion der Datenmodifikation. MySQL wird denken, dass keine Zeilen "betroffen" sind und 0 zurückkehren.

4.. Die richtige Art, betroffene zu handhaben.

Wenn Sie sich auf betroffene_rows verlassen, um festzustellen, ob die Operation erfolgreich ist, sollten Sie die folgenden zwei Punkte berücksichtigen:

  • Ob die SQL-Ausführung erfolgreich ist (kann von $ MySQLi-> errno oder $ mySQLI-> Fehler beurteilt werden)

  • Ob betroffene_rows ein positiver Wert ist, bedeutet, dass Daten tatsächlich geändert wurden

Vollständiges Beispiel:

<Code> $ mysqli = new MySQLI ("localhost", "user", "pass", "database");

$ result = $ mysqli-> query ("Benutzer setze status = 'inaktiv', wobei last_login <jetzt () - Intervall 1 Jahr");

if ($ result === false) {
Die ("SQL ERROR:".
} elseif ($ mysqli-> betroffen_rows> 0) {
echo "erfolgreich aktualisiert den Datensatz von {$ mysqli-> betroffen_rows}.";
} anders {
echo "Keine Datensätze werden aktualisiert.";
}
</code>

5. Erinnerung an tatsächliche Fälle

Beim Erstellen eines Verwaltungssystems oder einer Schnittstelle möchten Entwickler möglicherweise überprüfen, ob die eingehenden Bedingungen des Kunden durch Rückgabe von betroffenen_rows alle Daten aufnehmen. Ohne diesen Mechanismus im Voraus kann der Client fälschlicherweise der Meinung ist, dass das Update fehlgeschlagen ist oder der Serverfehler.

Zum Beispiel eine Schnittstelle:

<code> post /api/update-status.php?user_id=123 http/1.1 host: m66.net </code>

Wenn die Benutzer -ID nicht vorhanden ist und der Schnittstellencode nur bestimmt, ob der Vorgang basierend auf betroffenen_rows erfolgreich ist, ist der Client möglicherweise fälschlicherweise der Ansicht, dass das System einen Fehler aufweist. Es ist zu beachten, dass es "kein passender Datensatz" als "Betriebsfehler" durch explizitere Antwortinformationen ist.

Zusammenfassen

Bei MySQLI-Operation von PHP ist $ mysqli-> betroffen_rows ein wichtiges Mittel, um festzustellen, ob sich die Daten tatsächlich ändert. Es ist jedoch wichtig zu beachten:

  • Wenn es keinen Matching -Datensatz gibt, beträgt der Wert 0

  • Stimmte mit dem Datensatz überein, aber die Daten vor und nach dem Update sind gleich und es gibt auch 0 zurück

  • SQL -Ausführungsfehler werden in den betroffenen_rows nicht widerspiegelt, und ein zusätzliches Urteil ist erforderlich

Bei der Verwendung dieses Attributs sollten Entwickler ihr Verhalten vollständig verstehen und logische Schwachstellen oder Fehleinschätzungen der Aktualisierungsergebnisse vermeiden.