Je to jen odhad, protože jste neposkytli své schéma, ale je možné v jednom ze sloupců ve vašem jedinečném klíči použít hodnotu null?
Upravit:
Jak říká @G-Nugget v komentářích, potřebujete jedinečný klíč pro příslušné sloupce:
http://dev.mysql.com/doc /refman/5.6/en/insert-on-duplicate.html
Musíte mít jedinečný klíč pro kombinaci sloupců, které by měly být jedinečné.
např.:
ALTER TABLE yourTable ADD UNIQUE KEY (`canid`, `categoryid`);
Při dotazech na databázi také uveďte SHOW CREATE TABLE
pro příslušné tabulky.