Position actuelle: Accueil> Derniers articles> Comment utiliser correctement Pdostation :: RowCount pour obtenir le nombre de lignes affectées par une insertion dans la déclaration

Comment utiliser correctement Pdostation :: RowCount pour obtenir le nombre de lignes affectées par une insertion dans la déclaration

gitbox 2025-05-28

Lors de l'exploitation de bases de données à l'aide de PHP, l'APD est un moyen recommandé de fournir une interface unifiée, flexible et sécurisée. Parmi eux, la méthode PDOSTATION :: RowCount () est souvent utilisée pour obtenir le nombre de lignes affectées par les opérations SQL, mais elle se comporte légèrement différemment dans différents types d'instructions (tels que sélectionner , insérer , mettre à jour , supprimer ). Cet article se concentre sur la façon d'éviter les malentendus courants.

1. Applicabilité de RowCount () à insérer

Habituellement, nous voulons savoir combien de lignes sont insérées avec succès après avoir effectué l'opération d'insertion, comme:

 $pdo = new PDO('mysql:host=localhost;dbname=test', 'user', 'password');
$sql = "INSERT INTO users (name, email) VALUES (:name, :email)";
$stmt = $pdo->prepare($sql);

$stmt->bindValue(':name', 'Alice');
$stmt->bindValue(':email', '[email protected]');
$stmt->execute();

echo $stmt->rowCount(); // Sortie attendue:1

Dans la plupart des cas, en particulier lorsque vous utilisez MySQL , RowCount () renvoie correctement le nombre de lignes affectées (généralement 1) si une seule instruction d'insertion est exécutée. Mais si vous vous souciez de la compatibilité des données croisées , vous devez être prudent.

2.

Pour les instructions d'insertion par lots suivantes:

 $sql = "INSERT INTO users (name, email) VALUES 
        ('Bob', '[email protected]'), 
        ('Charlie', '[email protected]')";
$stmt = $pdo->prepare($sql);
$stmt->execute();

echo $stmt->rowCount(); // exister MySQL Suivant revient généralement 2

Bien que RowCount () soit susceptible de renvoyer 2, cela n'est pas toujours pris en charge par tous les pilotes de la base de données , et dans PostgreSQL, SQLite et d'autres bases de données, ce comportement peut être indisponible ou renvoyer 0.

Conseils de documentation officiels:

Pour certaines bases de données, telles que PostgreSQL, RowCount () renvoie des valeurs pour les instructions d'insert de type.

Ainsi, si vous souhaitez utiliser RowCount () en toute sécurité pour obtenir le nombre de lignes insérées dans un environnement multiplateforme, assurez-vous:

  • Utilisez un pilote de base de données (tel que MySQL) qui prend en charge cette fonctionnalité.

  • Utilisez des instructions d'insertion standard, sans s'appuyer sur la clé en double ou les clauses de retour (sauf si la base de données les prend explicitement les prend en charge explicitement).

3. Comment obtenir le nombre de lignes affectées par l'insert plus solidement?

Voici quelques suggestions pratiques:

1. Assurez-vous que vous utilisez PDO + MySQL

Confirmez que l'environnement actuel utilise MySQL ou des pilotes compatibles, et la valeur de retour de RowCount () est significative.

 if ($pdo->getAttribute(PDO::ATTR_DRIVER_NAME) === 'mysql') {
    echo "Insérer avec succès,Influencer le nombre de lignes:" . $stmt->rowCount();
} else {
    echo "Non MySQL base de données,rowCount() Les résultats peuvent être inexacts";
}

2. Pour l'insertion d'une seule ligne, il est sûr d'utiliser RowCount ()

La plupart des conducteurs prennent en charge le renvoi d'un nombre affecté de lignes de 1 pour un seul insert, ce qui est recommandé.

3. Pour l'insertion multi-lignes, il est recommandé d'utiliser des transactions pour faire boucle

 $pdo->beginTransaction();
$total = 0;

$stmt = $pdo->prepare("INSERT INTO users (name, email) VALUES (:name, :email)");
$data = [
    ['name' => 'David', 'email' => '[email protected]'],
    ['name' => 'Eve', 'email' => '[email protected]']
];

foreach ($data as $row) {
    $stmt->execute($row);
    $total += $stmt->rowCount();
}

$pdo->commit();

echo "Insérer au total $total D'ACCORD";

Grâce à une seule boucle de correspondance d'insertion, vous pouvez vous assurer que RowCount () se comporte de manière cohérente sous chaque pilote.

4. Résumé des malentendus communs

Idée fausse illustrer
Toutes les bases de données estiment que RowCount () est pris en charge pour renvoyer le nombre de lignes insérées En fait, PostgreSQL et SQLite peuvent retourner 0
Trust Rowcount () lors de l'insertion de lot Peut être inexact dans les environnements non Mysql
Utilisez RowCount () pour déterminer si l'insertion est réussie Il est préférable d'utiliser la valeur de retour booléenne d' Execute () pour coopérer avec le mécanisme de gestion des erreurs

5. Solution alternative: utilisez Last_insert_id ()

Si vous vous souciez uniquement de l'ID de clé primaire insérée (en particulier la clé primaire de mise en œuvre), vous pouvez utiliser:

 $pdo->lastInsertId();

Remarque: Convient uniquement pour l'insertion de lignes et de tables uniques avec des clés primaires automatiquement.

6. Résumé

PDOSTATION :: RowCount () est un outil puissant qui se comporte légèrement différemment entre les différentes bases de données. Lorsque vous l'utilisez pour obtenir le nombre de lignes affectées par une insertion dans l'instruction , elle est recommandée:

  • La priorité est donnée à utiliser dans l'environnement MySQL.

  • Il est plus sécurisé d'utiliser des transactions pour l'insertion par lots.

  • Dans les scénarios multi-données, vous devriez envisager d'utiliser des fonctionnalités de rendement spécifique à la base de données ou d'autres fonctionnalités pour éviter de compter sur RowCount () .

Pour voir plus d'exemples de pratique PDO, visitez https://gitbox.net/docs/pdo .