«вставить в … при дублировании ключа» с автоматическим приращением

Я пытаюсь сделать INSERT, только если комбинация из двух столбцов (a и b) еще не существует. В противном случае, я хочу сделать ОБНОВЛЕНИЕ. Проблема следующего кода в том, что он всегда вставляет новую строку вместо обновления, когда я хочу. Причина, по-моему, в том, что мне не удается создать столбец с двумя уникальными параметрами в настройках моей таблицы.
У кого-нибудь есть решение? Google, кажется, не мой друг сегодня ..

Стол:

id: int, primary, AI
a b c и d: int

Код:

$req = $connexion -> prepare("INSERT INTO position (a,b,c,d)
VALUES (:a,:b,:c,:d)
ON DUPLICATE KEY UPDATE
c=:c;");
$position->bindParam(':a', $a);
$position->bindParam(':b', $b);
$position->bindParam(':c', $c);
$position->bindParam(':d', $d);
$a = $val_a;
$b = $val_b;
$c = $val_c;
$d = $val_d;
$req -> execute();

0

Решение

ON DUPLICATE KEY требует UNIQUE KEY если вы не соответствуете PRIMARY KEY, Вы можете добавить UNIQUE KEY используя ALTER TABLE запрос

ALTER TABLE position ADD UNIQUE KEY (a,b)
1

Другие решения

Вы уже пытались изменить таблицу, чтобы отразить то, что вам нужно? попробуйте это перед выполнением вашего кода.

ALTER TABLE `position` ADD UNIQUE `unique_index`(`a`, `b`);
1

По вопросам рекламы [email protected]