Я пытаюсь сделать 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();
ON DUPLICATE KEY
требует UNIQUE KEY
если вы не соответствуете PRIMARY KEY
, Вы можете добавить UNIQUE KEY
используя ALTER TABLE
запрос
ALTER TABLE position ADD UNIQUE KEY (a,b)
Вы уже пытались изменить таблицу, чтобы отразить то, что вам нужно? попробуйте это перед выполнением вашего кода.
ALTER TABLE `position` ADD UNIQUE `unique_index`(`a`, `b`);