@dasauser
Пишу на PHP

Как правильно оформить INSERT ... ON DUPLICATE KEY UPDATE?

mariadb, yii2, как правильно оформить INSERT ... ON DUPLICATE KEY UPDATE?
пробовал так:
\Yii::$app->db->createCommand()
    ->batchInsert(ProductsBarcodes::tableName(), ['product_code', 'barcode'], $barcodes_codes)
    ->execute();

ошибка:
Error: SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry '4064900053098' for key 'barcode'

погуглил, пересисал, пытаюсь сделать запрос с помощью queryBuilder'а так (взял отсюда):
$db = \Yii::$app->db;
$sql = $db->queryBuilder->batchInsert(ProductsBarcodes::tableName(), ['product_code', 'barcode'], $barcodes_codes);
$db->createCommand($sql . ' ON DUPLICATE KEY UPDATE')->execute();

выбрасывает ошибку:
SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '' at line 1
The SQL being executed was: INSERT INTO `product_barcode` (`product_code`, `barcode`) VALUES ('123123', '123123123'), ('1005770', '873293005560'), ('1006274', '8001090190543'), ('1006275', '4015400681243'), ('1006276', '4015400681212'), ('1006277', '4606086374538') ON DUPLICATE KEY UPDATE
  • Вопрос задан
  • 259 просмотров
Решения вопроса 1
@dasauser Автор вопроса
Пишу на PHP
сделал так:
1. ищу в базе запись с нужными атрибутами
2. есть - пропускаю, нету - добавляю в массив обновляемых записей
3. создаю запрос, вставляющий записи
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@AUser0
Чем больше знаю, тем лучше понимаю, как мало знаю.
Если MySQL - то вместо INSERT INTO можно сделать REPLACE INTO, все аргументы запроса такие-же, меняется только первое слово.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы