sql >> Base de Datos >  >> RDS >> Mysql

PHP PDO no arroja una excepción en la inserción de clave duplicada

Actualización 2018:los DEV no consideran esto un error, sino un comportamiento previsto. Por lo tanto, los usuarios de PHP tienen que vivir con eso. El informe está cerrado para futuras preguntas...

Esto a menudo se ha informado como un error con PDO :https://bugs.php.net/bug.php?id=61613

Solo arrojará una excepción si FIRST La declaración no es válida. Si la primera declaración funciona sin problemas, no obtendrá ningún error, y su primera declaración es válida:

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

como solución alternativa, o según eliminado por el usuario la forma correcta de hacerlo:debe procesar los conjuntos de filas uno por uno (tomado de los comentarios de los informes de errores):

$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;
}