Bei der Entwicklung von Anwendungen müssen wir häufig Datensätze in der Datenbank löschen. Nach Abschluss des Löschvorgangs kann es erforderlich sein, die Anzahl der gelöschten Datensätze zu erhalten. PDO (PHP -Datenobjekte) ist eine der häufig verwendeten Datenbankzugriffsmethoden in PHP. Es liefert die Methode pdostatement :: rowCount (), um die Anzahl der betroffenen Zeilen zu erhalten. Für Stapel -Löschvorgänge gibt es jedoch einige Details, auf die bei der Verwendung von pdostatement :: rowCount () beachtet werden kann, um die Anzahl der gelöschten Datensätze zu erhalten.
Die pdostatement :: rowCount () -Methode gibt die Anzahl der Zeilen zurück, die von der zuletzt ausgeführten SQL -Anweisung betroffen sind. Es wird normalerweise verwendet, um die Anzahl der betroffenen Zeilen nach einem Abfragebetrieb (z. B. Aktualisierung oder Löschen ) zu erhalten.
<?php
// Angenommen, wir haben bereits einen PDO Beispiel
$pdo = new PDO('mysql:host=localhost;dbname=testdb', 'root', '');
// Einen Datensatz löschen
$stmt = $pdo->prepare("DELETE FROM users WHERE id = :id");
$stmt->bindParam(':id', $id);
$stmt->execute();
// Holen Sie sich die Anzahl der gelöschten Datensätze
$deletedRows = $stmt->rowCount();
echo "Gelöscht {$deletedRows} Aufzeichnen";
?>
Beim Löschen in Stapeln kann die Methode von RowCount () die Anzahl der gelöschten Datensätze wie erwartet nicht zurückgeben.
Bei der Ausführung der Stapel -Löschung stimmt die Anzahl der von PDOSTATEMENT :: RowCount () zurückgegebenen Zeilen möglicherweise nicht genau den Erwartungen überein. Dies liegt daran, dass einige Datenbanken (wie MySQL) Abfragen optimieren und bei der Durchführung der Stapeldeletion eine unterschiedliche Anzahl von Affektzeilen zurückgeben können.
Beispielsweise wirken sich in MySQL Operationen manchmal in Nullzeilen aus, da keine Datensätze, die die Kriterien erfüllen, gefunden werden. Selbst für Stapel -Löschvorgänge werden nur die tatsächlichen gelöschten Datensätze gezählt. Zu diesem Zeitpunkt kann RowCount () auf Null zurückkehren, insbesondere wenn keine Aufzeichnungen vorhanden sind, die den Kriterien entsprechen.
Für die Stapeldeletion, um die korrekte Anzahl von gelöschten Datensätzen sicherzustellen, können Sie die folgenden Methoden berücksichtigen:
Eine Möglichkeit besteht darin, zuerst den Löschvorgang durchzuführen und dann die Anzahl der gelöschten Datensätze abzufragen. Führen Sie nach der Ausführung der Anweisung Löschen eine Abfrage aus, um die Anzahl der gelöschten Datensätze zu erhalten.
<?php
// Angenommen, wir wollen alle Altersgruppen weniger löschen als18Benutzer
$stmt = $pdo->prepare("SELECT COUNT(*) FROM users WHERE age < 18");
$stmt->execute();
$deletedCount = $stmt->fetchColumn();
// Löschung durchführen
$stmt = $pdo->prepare("DELETE FROM users WHERE age < 18");
$stmt->execute();
// Bestätigen Sie die Anzahl der gelöschten Datensätze
echo "Gelöscht {$deletedCount} Aufzeichnen";
?>
In der Löschvorgänge der Stapel stellt das Aktivieren einer Transaktion sicher, dass die genaue Anzahl der Datensätze vor dem Löschen der Daten erhalten wird. Durch Ausführen von Löschvorgängen und Auswählen von Count () -Anfragen in einer Transaktion kann die Datenkonsistenz zwischen beiden sichergestellt werden.
<?php
// Starten Sie eine Transaktion
$pdo->beginTransaction();
try {
// Erhalten Sie die Anzahl der Datensätze, die den Löschkriterien entsprechen
$stmt = $pdo->prepare("SELECT COUNT(*) FROM users WHERE age < 18");
$stmt->execute();
$deletedCount = $stmt->fetchColumn();
// Löschung durchführen操作
$stmt = $pdo->prepare("DELETE FROM users WHERE age < 18");
$stmt->execute();
// Transaktionen einreichen
$pdo->commit();
// Ausgabe Anzahl der gelöschten Datensätze
echo "Gelöscht {$deletedCount} Aufzeichnen";
} catch (Exception $e) {
// Wenn eine Ausnahme auftritt,Rollen Sie die Transaktion zurück
$pdo->rollBack();
echo "Löschung fehlgeschlagen: " . $e->getMessage();
}
?>
Durch die Verwendung von Transaktionen können Datenkonsistenzen zwischen Löschvorgängen und Abfragen der Aufzeichnungszahl vermieden werden.
Wenn Sie eine Datenbank verwenden, die die Rückgabezahlen für Zeilen unterstützt, sollte RowCount () genau die Anzahl der gelöschten Datensätze zurückgeben. Wenn der Datenbankausführungsplan einen Fehler zurückgibt, der sich auf Zeilenzahl auswirkt, kann es erforderlich sein, die Daten auf andere Weise zu ergänzen, z. B. die Verwendung von bedingten Abfragen, Protokollen usw.
Achten Sie beim Löschen von Daten in Stapeln bitte auf die folgenden Punkte, wenn Sie PDOSTATEMENT :: RowCount () verwenden, um die gelöschten Datensätze zu erhalten:
Die Anzahl der von RowCount () zurückgegebenen Zeilen ist nicht unbedingt vollständig genau, insbesondere für einige optimierte SQL -Operationen.
Um sicherzustellen, dass die genaue Anzahl der Löschdatensätze erhalten wird, kann die Anzahl der Datensätze, die die Kriterien erfüllen, durch Abfragesteuerung vor der Ausführung des Löschvorgangs erhalten werden.
Die Verwendung von Transaktionen sorgt für die Atomizität von Abfragen und Löschen von Operationen und vermeidet Inkonsistenzen in Zwischendaten.
Durch die Kombination dieser Methoden können wir die Anzahl der in Stapel gelöschten Datensätzen genauer erhalten und die Stabilität und Konsistenz von Datenoperationen verbessern.