Mysql
 sql >> Base de données >  >> RDS >> Mysql

Insertion MYSQL là où il n'existe pas avec PDO

Votre requête semble complètement foirée, en particulier dans votre EXISTS sous-requête. Vous sélectionnez MyTbl.ColA à partir de tickets ???

Mon conseil serait simplement d'ajouter une contrainte unique sur MyTbl (ColA, ColB) .

ALTER TABLE MyTbl ADD UNIQUE (ColA, ColB);

Ensuite, votre INSERT échouera avec une violation de contrainte unique qui peut être attrapé dans une 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;
        }
    }
}

Pour répondre au message d'erreur que vous voyez... c'est parce que vous ne faites pas la différence entre le INSERT table et la table de sous-requête.