Position actuelle: Accueil> Derniers articles> Comment obtenir la quantité de données supprimée via Pdostation :: RowCount lors de la suppression par lots

Comment obtenir la quantité de données supprimée via Pdostation :: RowCount lors de la suppression par lots

gitbox 2025-05-20

Lors du développement d'applications, nous devons souvent supprimer des enregistrements dans la base de données. Une fois l'opération de suppression terminée, il peut être nécessaire d'obtenir le nombre d'enregistrements supprimés. PDO (PHP Data Objectts) est l'une des méthodes d'accès à la base de données couramment utilisées dans PHP. Il fournit la méthode PDOSTATION :: RowCount () pour obtenir le nombre de lignes affectées. Cependant, pour les opérations de suppression par lots, il y a des détails à prêter attention lors de l'utilisation de Pdostation :: RowCount () pour obtenir le nombre d'enregistrements supprimés.

1. Utilisation de base de Pdostation :: RowCount ()

La méthode Pdostatement :: RowCount () renvoie le nombre de lignes affectées par l'instruction SQL la plus récemment exécutée. Il est généralement utilisé pour obtenir le nombre de lignes affectées après une opération de requête (comme la mise à jour ou la suppression ).

 <?php
// Supposons que nous en ayons déjà un PDO Exemple
$pdo = new PDO('mysql:host=localhost;dbname=testdb', 'root', '');

// Supprimer un record
$stmt = $pdo->prepare("DELETE FROM users WHERE id = :id");
$stmt->bindParam(':id', $id);
$stmt->execute();

// Obtenez le nombre d&#39;enregistrements supprimés
$deletedRows = $stmt->rowCount();
echo "Supprimé {$deletedRows} Enregistrer";
?>

Cependant, lors de la suppression par lots, la méthode RowCount () peut ne pas renvoyer le nombre d'enregistrements supprimés comme prévu.

2. Problèmes de fonctionnement de suppression en vrac et de country ()

Lors de la suppression par lots, le nombre de lignes renvoyées par Pdostation :: RowCount () peut ne pas correspondre exactement aux attentes. En effet, certaines bases de données (telles que MySQL) peuvent optimiser les requêtes et renvoyer un nombre différent de lignes affectant lors de la suppression par lots.

Par exemple, dans MySQL, les opérations de suppression affectent parfois les lignes zéro car aucun enregistrement qui répond aux critères ne peut être trouvé. Même pour les opérations de suppression par lots, seuls les enregistrements supprimés réels seront comptés. À ce stade, RowCount () peut revenir à zéro, surtout s'il n'y a pas de dossiers qui répondent aux critères.

3. Comment s'assurer que le nombre d'enregistrements supprimés est correctement obtenu?

Pour la suppression par lots, pour assurer le nombre correct d'enregistrements supprimés, vous pouvez considérer les méthodes suivantes:

Méthode 1: Requête après avoir utilisé PDOSTATION :: ROWCOUNT ()

Une façon consiste d'abord à effectuer l'opération de suppression, puis à interroger le nombre d'enregistrements qui ont été supprimés. Après avoir exécuté l'instruction Delete , exécutez une requête de sélection () pour obtenir le nombre d'enregistrements supprimés.

 <?php
// Supposons que nous voulons supprimer tous les âges moins que18Utilisateurs
$stmt = $pdo->prepare("SELECT COUNT(*) FROM users WHERE age < 18");
$stmt->execute();
$deletedCount = $stmt->fetchColumn();

// Effectuer la suppression
$stmt = $pdo->prepare("DELETE FROM users WHERE age < 18");
$stmt->execute();

// Confirmez le nombre d&#39;enregistrements supprimés
echo "Supprimé {$deletedCount} Enregistrer";
?>

Méthode 2: Utiliser les transactions pour assurer la cohérence

Dans les opérations de suppression par lots, l'activation d'une transaction garantit que le nombre exact d'enregistrements est obtenu avant de supprimer les données. En effectuant des opérations de suppression et en sélectionnant Count () Requêtes dans une transaction, la cohérence des données entre les deux peut être assurée.

 <?php
// Démarrer une transaction
$pdo->beginTransaction();

try {
    // Obtenez le nombre de dossiers qui répondent aux critères de suppression
    $stmt = $pdo->prepare("SELECT COUNT(*) FROM users WHERE age < 18");
    $stmt->execute();
    $deletedCount = $stmt->fetchColumn();

    // Effectuer la suppression操作
    $stmt = $pdo->prepare("DELETE FROM users WHERE age < 18");
    $stmt->execute();

    // Soumettre les transactions
    $pdo->commit();

    // Nombre de sortie d&#39;enregistrements supprimés
    echo "Supprimé {$deletedCount} Enregistrer";
} catch (Exception $e) {
    // Si une exception se produit,Faire reculer la transaction
    $pdo->rollBack();
    echo "La suppression a échoué: " . $e->getMessage();
}
?>

En utilisant des transactions, les incohérences de données entre les opérations de suppression et les requêtes de comptage d'enregistrements peuvent être évitées.

Méthode 3: Utilisez Pdostation :: RowCount () et le nombre de lignes renvoyées par la base de données

Si vous utilisez une base de données qui prend en charge les comptes de lignes de retour, RowCount () doit renvoyer exactement le nombre d'enregistrements supprimés. Si le plan d'exécution de la base de données renvoie une erreur affectant le nombre de lignes, il peut être nécessaire de compléter les données d'autres manières, comme l'utilisation de requêtes conditionnelles, de journaux, etc.

4. Résumé

Lors de la suppression des données par lots, veuillez prêter attention aux points suivants lorsque vous utilisez Pdostation :: RowCount () pour obtenir les enregistrements supprimés:

  • Le nombre de lignes renvoyées par RowCount () n'est pas nécessairement complètement précise, en particulier pour certaines opérations SQL optimisées.

  • Pour s'assurer que le nombre exact d'enregistrements de suppression est obtenu, le nombre d'enregistrements qui répondent aux critères peuvent être obtenus en interrogeant le nombre avant d'effectuer l'opération de suppression.

  • L'utilisation de transactions assure l'atomicité des requêtes et supprime les opérations et évite les incohérences dans les données intermédiaires.

En combinant ces méthodes, nous pouvons obtenir plus précisément le nombre d'enregistrements supprimés dans les opérations de suppression par lots et améliorer la stabilité et la cohérence des opérations de données.