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

MYSQL Indsæt hvor ikke findes med PDO

Din forespørgsel ser fuldstændig rodet ud, især i din EXISTS underforespørgsel. Du vælger MyTbl.ColA fra tickets ???

Mit råd ville være blot at tilføje en unik begrænsning på MyTbl (ColA, ColB) .

ALTER TABLE MyTbl ADD UNIQUE (ColA, ColB);

Derefter din INSERT mislykkes med en unik begrænsningsovertrædelse som kan fanges i en 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;
        }
    }
}

For at løse den fejlmeddelelse, du får vist... er det, fordi du ikke skelner mellem INSERT tabellen og underforespørgselstabellen.




  1. Begræns antallet af returnerede rækker i en SQL Server-forespørgsel ved at bruge TOP-klausulen

  2. php pdo få kun én værdi fra mysql; værdi, der er lig med variabel

  3. Brug NEWID() til at oprette en unik værdi i SQL Server

  4. psql:FATAL:Identifikationsgodkendelse mislykkedes for brugerens postgres