Dans le développement quotidien, la suppression des données est très courante mais nécessite une tâche de traitement minutieuse. En particulier dans les scénarios impliquant un traitement de données à grande échelle ou nécessitant une efficacité d'exécution, il est particulièrement important de déterminer avec précision si l'opération de suppression est réussie et s'il est nécessaire de continuer à exécuter la logique suivante. À l'heure actuelle, la fonction PDOSTATION :: RowCount peut jouer son rôle.
Pdostatement :: RowCount est une méthode après que PDO exécute SQL dans PHP, qui est utilisé pour renvoyer le nombre de lignes affectées par l'instruction SQL précédente . Pour des déclarations telles que la suppression , la mise à jour , l'insertion , etc., il peut nous dire exactement combien de lignes de données sont réellement modifiées ou supprimées.
$pdo = new PDO("mysql:host=localhost;dbname=testdb", "user", "password");
$stmt = $pdo->prepare("DELETE FROM users WHERE last_login < :threshold");
$stmt->execute([':threshold' => '2024-01-01']);
$deletedRows = $stmt->rowCount();
echo "Supprimé au total $deletedRows Records de ligne。";
Dans cet exemple, s'il existe des enregistrements qui répondent aux critères de la table utilisateur, RowCount () peut renvoyer le nombre de lignes supprimées.
Plusieurs fois, nous pouvons exécuter inconditionnellement une instruction de suppression dans la logique du programme, mais en fait, il peut ne pas y avoir de enregistrements qui remplissent les conditions de la base de données. Bien que cette opération de suppression sans signification ne signale pas d'erreur, elle augmente le fardeau de la base de données.
Utilisez RowCount () pour déterminer avec précision s'il faut exécuter la logique suivante avant et après l'exécution:
$stmt = $pdo->prepare("DELETE FROM logs WHERE created_at < :expired_time");
$stmt->execute([':expired_time' => date('Y-m-d H:i:s', strtotime('-30 days'))]);
if ($stmt->rowCount() > 0) {
// Les enregistrements ont été supprimés,Peut effectuer des tâches de nettoyage ultérieures
file_get_contents("https://gitbox.net/cleanup-notify");
}
En déterminant si un enregistrement est réellement supprimé, des appels distants inutiles ou une autre consommation de ressources sont évités.
Lorsque vous gérez de grandes opérations de suppression par lots, deux accès à la base de données peuvent être nécessaires si vous utilisez d'abord les vérifications de sélection (*) . RowCount () peut immédiatement donner le nombre de lignes affectées après l'exécution, enregistrant une surcharge de requête.
$stmt = $pdo->prepare("DELETE FROM temp_data WHERE expire_at < NOW()");
$stmt->execute();
if ($stmt->rowCount() === 0) {
echo "Aucune donnée à supprimer。";
} else {
echo "Supprimé avec succès {$stmt->rowCount()} Données temporaires。";
}
Cette méthode convient particulièrement à l'écriture dans les scripts de nettoyage chronométrés pour éviter la répétition inutile du travail.
Lorsque vous effectuez des opérations de base de données, l'enregistrement du nombre de lignes affectées est essentielle pour le dépannage et la surveillance des performances. La valeur de retour de RowCount () peut être utilisée pour créer des journaux détaillés pour vous aider à localiser les goulots d'étranglement des performances ou les erreurs logiques.
$logMessage = sprintf(
"[%s] L'opération de nettoyage est terminée,Supprimer au total %d Commande expirée。",
date('Y-m-d H:i:s'),
$stmt->rowCount()
);
error_log($logMessage, 3, '/var/log/cleanup.log');
Bien que RowCount () fonctionne bien dans la plupart des bases de données, cela ne fonctionne pas toujours pour des instructions sélectionnées . Dans certains pilotes de base de données, appeler RowCount () sur une instruction SELECT renvoie 0, il ne devrait donc être utilisé que pour les opérations d'écriture telles que INSERT , DELETE et MISE À JOUR .