Pdostatement :: rowCount () ist eine übliche, aber oft missverstandene Methode beim Betrieb einer Datenbank mit PDO in PHP. Insbesondere nach Ausführung von Aktualisierungen oder Löschen von Anweisungen verwenden wir häufig, um festzustellen, ob die Daten "aktualisiert" oder "gelöscht" wurden. Aber kennen Sie die Details des Verhaltens dahinter?
$pdo = new PDO('mysql:host=localhost;dbname=test', 'user', 'password');
$sql = "UPDATE users SET status = 'active' WHERE last_login > :date";
$stmt = $pdo->prepare($sql);
$stmt->execute([':date' => '2024-01-01']);
echo "Aktualisiert " . $stmt->rowCount() . " Zeilenaufzeichnungen";
Dieser Code führt eine Update -Anweisung mithilfe von RowCount () aus, um die tatsächliche Anzahl der betroffenen Zeilen zu erhalten.
Nur gültig für DML : RowCount () kann die Anzahl der betroffenen Zeilen nach Einfügen , Aktualisieren und Löschen korrekt zurückgeben. Für ausgewählten gibt der MySQL -Treiber normalerweise 0 zurück.
Bezogen auf Datenänderungen : RowCount () kann 0 zurückgeben, wenn sich die Zielzeilendaten nicht wirklich ändert (d. H. Der neue Wert ist der gleiche wie der alte Wert). Dies ist ein Problem mit MySQL -Verhalten, nicht mit PDO.
Nicht gleich "übereinstimmen Anzahl der Zeilen" : Es zählt "Anzahl der Zeilen, die sich tatsächlich ändern", nicht "Anzahl der Zeilen, die den Wherdien erfüllen".
$sql = "UPDATE users SET email = :email WHERE id = :id";
$stmt = $pdo->prepare($sql);
$stmt->execute([':email' => '[email protected]', ':id' => 1]);
if ($stmt->rowCount() > 0) {
echo "Benutzerinformationen wurden aktualisiert";
} else {
echo "Kein Update,Es kann sein, dass sich die Daten nicht geändert haben oder ID Existiert nicht";
}
Das Beherrschen des Verhaltens von RowCount () kann Ihre Geschäftslogik strenger machen und vermeiden, dass die Datenbankoperation in Kraft tritt. Weitere Beispiele finden Sie unter https://gitbox.net/docs/pdo-update .