Mysql
 sql >> Base de données >  >> RDS >> Mysql

PHP PDO ne lève pas d'exception lors de l'insertion de clé en double

Mise à jour 2018 :les développeurs ne considèrent pas cela comme un bogue, mais comme un comportement intentionnel. Ainsi, les utilisateurs de PHP doivent vivre avec cela, le rapport est fermé pour toute question future...

Cela a souvent été signalé comme bogue avec PDO :https://bugs.php.net/bug.php?id=61613

Il ne lèvera une exception que si le FIRST La déclaration n'est pas valide. Si la première instruction se déroule correctement, vous n'obtiendrez aucune erreur - Et votre première instruction est valide :

INSERT INTO `a` (`b`, `c`) VALUES
  (1, 1),
  (2, 2),
  (3, 2);

comme solution de contournement - ou selon utilisateur supprimé la bonne façon de le faire - vous devez traiter les ensembles de lignes un par un (extrait des commentaires des rapports de bogues) :

$pdo->beginTransaction();
try {
    $statement = $pdo->prepare($sql);
    $statement->execute();
    while ($statement->nextRowset()) {/* https://bugs.php.net/bug.php?id=61613 */};
    $pdo->commit();
} catch (\PDOException $e) {
    $pdo->rollBack();
    throw $e;
}