sql >> Databasteknik >  >> RDS >> Mysql

PHP PDO kastar inget undantag på duplicerad nyckelinsättning

Uppdatering 2018:DEV:er betraktar inte detta som en bugg, utan avsett beteende. Så PHP-användare måste leva med det, rapporten är stängd för framtida frågor...

Detta har ofta rapporterats som bugg med PDO :https://bugs.php.net/bug.php?id=61613

Det kommer bara att skapa ett undantag om FIRST Uttalandet är ogiltigt. Om den första satsen går smidigt kommer du inte att få något fel - Och din första sats är giltig:

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

som en lösning - eller enligt användare borttagen det rätta sättet att göra det - du måste bearbeta raduppsättningarna en efter en (tagen från kommentarerna till felrapporterna):

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



  1. Hur man lägger till dynamisk textruta (rad) och sparar till databasen med PHP

  2. Anropar lagrad procedur med returvärde

  3. Atomic UPDATE .. SELECT i Postgres

  4. Python List till PostgreSQL Array