我在PHP中的查询是:
$upd2 = $di->getDb()->prepare('INSERT INTO '. self::TABLE . '_agrupamento_avaliacao (idSemana, idEntidade_agrupamento) VALUES(?, ?) ON DUPLICATE KEY UPDATE idEntidade_agrupamento=VALUES(idEntidade_agrupamento)');
$upd2->Execute(array($semana, $agrupamento));
但它不起作用。它正在插入相同的数据。 我测试了查询:
INSERT INTO entidade_agrupamento_avaliacao (idSemana, idEntidade_agrupamento) VALUES(17, 2808) ON DUPLICATE KEY UPDATE
idEntidade_agrupamento=VALUES(idEntidade_agrupamento)
但它也插入相同的数据而不是更新数据。
我的表是:
CREATE TABLE `entidade_agrupamento_avaliacao` (
`id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
`idSemana` INT(10) UNSIGNED NOT NULL,
`idEntidade_Agrupamento` INT(10) UNSIGNED NOT NULL,
PRIMARY KEY (`id`),
INDEX `FK__semana` (`idSemana`),
INDEX `FK_entidade_agrupamento_avaliacao_entidade_agrupamento` (`idEntidade_Agrupamento`),
CONSTRAINT `FK__semana` FOREIGN KEY (`idSemana`) REFERENCES `semana` (`id`) ON UPDATE CASCADE ON DELETE CASCADE,
CONSTRAINT `FK_entidade_agrupamento_avaliacao_entidade_agrupamento` FOREIGN KEY (`idEntidade_Agrupamento`) REFERENCES `entidade_agrupamento` (`id`) ON UPDATE CASCADE ON DELETE CASCADE
)COLLATE='latin1_swedish_ci'
ENGINE=InnoDB
AUTO_INCREMENT=4
;
有什么问题?
考虑“$ di-> getDb() - >准备”作为PDO声明准备。
答案 0 :(得分:3)
这是您的查询:
INSERT INTO '. self::TABLE . '_agrupamento_avaliacao (idSemana, idEntidade_agrupamento)
VALUES(?, ?)
ON DUPLICATE KEY UPDATE idEntidade_agrupamento = VALUES(idEntidade_agrupamento)');
您在表上唯一唯一的索引是id
上的主键。这是自动递增的,因此不会生成重复。
据推测,您希望将idSemana
声明为唯一。然后可以捕获重复的密钥。您可能认为index idSemana
足以达到此目的,但您确实需要unique idSemana
。