Insertar MYSQL donde no existe con PDO

Estoy insertando valores condicionalmente en una base de datos MySQL usando un comando PHP PDO. La condición indica que si la fila que se va a insertar ya existe, no la inserte. Si no existe, inserte la fila. El código funciona bien cuando ejecuto a través de PHPmyadmin, y así intercambio las variables PDO (:a, :b) con números estáticos.

Estoy teniendo el siguiente error:

Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[42S21]: Column already exists: 1060 Duplicate column name '0'' in...

El código PHP es el siguiente:

Preparo la declaración SQL ...

$InsertFoo = $pdo->prepare("

    INSERT INTO `MyTbl` (
                            `ColA`,
                            `ColB`
                            )
    SELECT * FROM ( SELECT :a, :b ) AS tmp
    WHERE NOT EXISTS (
        SELECT `MyTbl`.`ColA`
        FROM `MyTbl`
            WHERE `ColA` = :aa
            AND `ColB` = :bb
        )
    LIMIT 1

");

Y luego recorrer una matriz para ejecutar la declaración preparada una y otra vez. (La matriz se generó anteriormente usando SimpleXML, de ahí el->. Si no está familiarizado con SimpleXML, solo considere$foo->fooA como una variable que cambia para cada ciclo).

foreach ($loopme as $foo) {

    // query to be executed for ticket insertion
    $TicketsToInsert->execute(array(
                                    a => $foo->fooA,
                                    b => $foo->fooB,
                                    aa => $foo->fooA,
                                    bb => $foo->fooB
                                    ));

}

Cualquier consejo es muy apreciado:

Como nota al margen, hay muchas preguntas similares, pero no he encontrado ninguna que aborde exactamente este problema de PDO en la inserción.

PDO solo puede ejecutar una declaración a la vezMismo error, parece ser una fuente diferenteVariables PDO dentro de una selección seguida de unWhere declaración

¡Muchas gracias!

Contestadas

Phil ofreció la solución mucho más simple de aplicar una restricción única en varias filas, lo que a su vez rechazaría una fila recién insertada que fuera única en dichas filas. Esto en lugar de probar la inexistencia de la fila que está a punto de insertarse. Más detalles a continuación.

Respuestas a la pregunta(1)

Su respuesta a la pregunta