MYSQL Вставить, где не существует с PDO
Я условно вставляю значения в базу данных MySQL с помощью команды PHP PDO. Условие гласит, что если строка для вставки уже существует, не вставляйте ее. Если он не существует, вставьте строку. Код работает очень хорошо, когда я выполняю через PHPmyadmin, и, таким образом, меняются переменные PDO (:a
, :b
) со статическими номерами.
Я получаю следующую ошибку:
Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[42S21]: Column already exists: 1060 Duplicate column name '0'' in...
Код PHP выглядит следующим образом:
Я готовлю заявление 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
");
А затем переберите массив, чтобы выполнить подготовленный оператор снова и снова. (Массив был сгенерирован ранее с использованием SimpleXML, поэтому->
, Если вы не знакомы с SimpleXML, просто подумайте$foo->fooA
как переменная, которая изменяется для каждого цикла.)
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
));
}
Любой совет высоко ценится:
Как примечание, есть много подобных вопросов, но я не нашел ни одного, который точно касается этой проблемы PDO на вставке
PDO может выполнять только одну инструкцию за разТа же ошибка, похоже, другой источникПеременные PDO внутри выбора с последующимWhere
заявлениеБольшое спасибо!
Ответил
Фил предложил гораздо более простое решение применения уникального ограничения для нескольких строк, которое, в свою очередь, отклонило бы вновь вставленную строку, уникальную для указанных строк. Это в отличие от проверки на отсутствие строки, которая должна быть вставлена. Более подробная информация ниже.