Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

PHP PDO não lança exceção na inserção de chave duplicada


Atualização 2018:DEVs não consideram isso um bug, mas um comportamento pretendido.

Isso tem sido frequentemente relatado como bug com PDO :https://bugs.php.net/bug.php?id=61613

Ele só lançará uma exceção se o PRIMEIRO A declaração é inválida. Se a primeira instrução funcionar sem problemas, você não receberá nenhum erro - E sua primeira instrução é válida:
INSERT INTO `a` (`b`, `c`) VALUES
  (1, 1),
  (2, 2),
  (3, 2);

como solução alternativa - ou de acordo com usuário excluído a maneira certa de fazer isso - você precisa processar os conjuntos de linhas um por um (retirado dos comentários dos relatórios de bugs):
$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;
}