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

Insertar MYSQL donde no existe con PDO

Su consulta se ve completamente desordenada, especialmente en su EXISTS subconsulta. Estás seleccionando MyTbl.ColA de tickets ???

Mi consejo sería simplemente agregar una restricción única en MyTbl (ColA, ColB) .

ALTER TABLE MyTbl ADD UNIQUE (ColA, ColB);

Luego, su INSERT fallará con una violación de restricción única que puede ser atrapado en una PDOException .

$stmt = $pdo->prepare('INSERT INTO MyTbl (ColA, ColB) VALUES (?, ?)');
foreach ($loopme as $foo) {
    try {
        $stmt->execute([$foo->fooA, $foo->fooB]);
    } catch (PDOException $e) {
        $errorCode = $stmt->errorInfo()[1];
        if ($errorCode == 1586) {
            // I think 1586 is the unique constraint violation error.
            // Trial and error will confirm :)
        } else {
            throw $e;
        }
    }
}

Para abordar el mensaje de error que está viendo... es porque no está diferenciando entre INSERT tabla y la tabla de subconsulta.