Ce n'est qu'une supposition puisque vous n'avez pas fourni votre schéma, mais l'une des colonnes de votre clé unique est-elle nullable ?
Modifier :
Comme @G-Nugget le dit dans les commentaires, il faut une clé unique sur les colonnes en question :
http://dev.mysql.com/doc /refman/5.6/en/insert-on-duplicate.html
Vous devez avoir une clé unique sur la combinaison de colonnes qui doit être unique.
ex :
ALTER TABLE yourTable ADD UNIQUE KEY (`canid`, `categoryid`);
De plus, lorsque vous posez des questions sur la base de données, veuillez inclure SHOW CREATE TABLE
pour les tables en question.