Mysql
 sql >> Database >  >> RDS >> Mysql

MYSQL Inserisci dove non esiste con PDO

La tua query sembra completamente incasinata, specialmente nel tuo EXISTS sottoquery. Stai selezionando MyTbl.ColA da tickets ???

Il mio consiglio sarebbe semplicemente aggiungere un vincolo univoco su MyTbl (ColA, ColB) .

ALTER TABLE MyTbl ADD UNIQUE (ColA, ColB);

Quindi, il tuo INSERT fallirà con una violazione del vincolo univoco che può essere catturato in 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;
        }
    }
}

Per risolvere il messaggio di errore che stai vedendo... è perché non stai differenziando tra INSERT tabella e la tabella delle sottoquery.