Position actuelle: Accueil> Derniers articles> Comment obtenir le nombre affecté de lignes via Pdostation :: RowCount pour un jugement conditionnel

Comment obtenir le nombre affecté de lignes via Pdostation :: RowCount pour un jugement conditionnel

gitbox 2025-05-28

Lorsque vous utilisez PHP pour faire fonctionner une base de données, nous devons souvent savoir combien de lignes de données qu'elle affecte après l'exécution d'une instruction SQL. Par exemple, lors de l'exécution de la mise à jour , de la suppression ou de certaines opérations d'insertion , la compréhension du nombre de lignes affectées nous aide à déterminer si l'opération est réussie ou si l'étape suivante est requise.

À l'heure actuelle, la fonction Pdostatement :: RowCount () est utile. Cet article présentera comment utiliser la méthode RowCount () et le combinera avec des exemples de code réels pour montrer comment porter des jugements conditionnels en fonction du nombre de lignes renvoyées.

1. Qu'est-ce que Pdostation :: RowCount ()

RowCount () est une méthode de la classe PDOSTATION qui renvoie le nombre de lignes affectées par la dernière instruction SQL exécutée. La valeur de retour de cette fonction est généralement utilisée pour déterminer si les données sont réellement mises à jour ou supprimées.

 public int PDOStatement::rowCount();

Remarque: RowCount () peut se comporter légèrement différemment sous différents pilotes de base de données, en particulier lorsqu'ils sont utilisés pour des requêtes sélectionnées , qui peuvent ne pas renvoyer les résultats attendus.

2. Méthode d'utilisation de base

Ce qui suit est un exemple de mise à jour des informations utilisateur dans la base de données. Après avoir exécuté SQL, nous utilisons RowCount () pour déterminer si des données ont été réellement modifiées.

 <?php
// Informations sur la connexion de la base de données
$dsn = 'mysql:host=localhost;dbname=testdb;charset=utf8';
$username = 'dbuser';
$password = 'dbpass';

try {
    // créer PDO Exemple
    $pdo = new PDO($dsn, $username, $password);

    // Définir la gestion des erreurs d&#39;exception
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

    // Préparer SQL Mise à jour
    $sql = "UPDATE users SET email = :email WHERE id = :id";
    $stmt = $pdo->prepare($sql);

    // Lier les paramètres
    $stmt->bindValue(':email', '[email protected]');
    $stmt->bindValue(':id', 1);

    // Instruction d&#39;exécution
    $stmt->execute();

    // Obtenez le nombre de lignes affectées
    $affectedRows = $stmt->rowCount();

    // Jugement conditionnel
    if ($affectedRows > 0) {
        echo "Les informations de l&#39;utilisateur ont été mises à jour,Impact total {$affectedRows} D&#39;ACCORD。";
    } else {
        echo "Aucune information utilisateur n&#39;a été modifiée,Probablement parce que les données n&#39;ont pas changé。";
    }

} catch (PDOException $e) {
    echo "Erreur de base de données:" . $e->getMessage();
}
?>

3. Scénarios communs et techniques d'utilisation

1. Confirmez le nombre de suppressions après opération de suppression

 $sql = "DELETE FROM users WHERE last_login < NOW() - INTERVAL 1 YEAR";
$stmt = $pdo->prepare($sql);
$stmt->execute();

if ($stmt->rowCount() > 0) {
    echo "L&#39;utilisateur inactif a été supprimé avec succès。";
} else {
    echo "Aucun utilisateur à supprimer n&#39;a été trouvé。";
}

2. Vérifiez si l'insertion est réussie après l'insertion du lot

Certaines bases de données (telles que MySQL) permettent de retourner RowCount () après l'insertion par lots:

 $sql = "INSERT INTO logs (message, created_at) VALUES 
       ('fonctionner1', NOW()), 
       ('fonctionner2', NOW())";
$stmt = $pdo->prepare($sql);
$stmt->execute();

if ($stmt->rowCount() >= 2) {
    echo "Les journaux ont été écrits par lots。";
} else {
    echo "Le journal a échoué ou incomplet。";
}

4. Choses à noter

  1. Pour sélectionner les requêtes, le comportement RowCount () est incertain : il est généralement recommandé d'utiliser fetchall () ou fetch () pour déterminer s'il y a un résultat.

  2. En utilisant le pilote de base de données correct : certaines bases de données (telles que SQLite) ont une prise en charge limitée pour RowCount () dans certaines opérations.

  3. Ne confondez pas RowCount () comme le seul signe d'exécution réussie : cela signifie uniquement "nombre de lignes affectées", et n'équivaut pas "fonctionnement réussi", car la mise à jour des mêmes données peut ne pas modifier le nombre de lignes.