2011-03-08 5 views
5

Salut pourrait-on regarder cela et me dire où je vais mal. J'ai une instruction SQL que lorsque je fais écho à l'aide de php je reçois ce à l'écranMySQL SUR DUPLICATE KEY UPDATE numéro

INSERT INTO 'moviedb'.'genre' SET 'GenreID' = '18' , 'GenreName' = 'Drama' ON DUPLICATE KEY UPDATE 'GenreName' = 'Drama' WHERE 'GenreID' = '18' 
INSERT INTO 'moviedb'.'genre' SET 'GenreID' = '16' , 'GenreName' = 'Animation' ON DUPLICATE KEY UPDATE 'GenreName' = 'Animation' WHERE 'GenreID' = '16' 

Et voici la déclaration

$sql="INSERT INTO 'moviedb'.'genre' SET 'GenreID' = '{$genresID[$i]}' , 'GenreName' = '{$genreName[$i]}' ON DUPLICATE KEY UPDATE 'GenreName' = '{$genreName[$i]}' WHERE 'GenreID' = '{$genresID[$i]}'"; 

Ceci est l'erreur que je reçois:

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''moviedb'.'genre' SET 'GenreID' = '18' , 'GenreName' = 'Drama' ON DUPLICATE KEY ' at line 1 

Toute aide serait grandement appréciée, merci d'avance.

Répondre

9

Vous ne pouvez pas combiner un WHERE avec un ON DUPLICATE KEY.

Supprimer la clause WHERE, MySql ne mettra à jour que la ligne qui provoque la clé en double.

Pour une ligne multi INSERT, utilisez le VALUES() pour dire MySql de mettre à jour la valeur de qui est insérée, par exemple:

INSERT INTO moviedb.genre (GenreID,GenreName) 
VALUES ('18', 'Drama'), 
    ('16', 'Animation') 
ON DUPLICATE KEY UPDATE 
    GenreName = VALUES(GenreName); 
+0

Merci every1 ..... passé si longtemps à essayer de comprendre celui-là. Every1 mérite une coche. – RonanC

3

Vous citez les champs de MySQL ...

Vous devez utiliser (`guillemets obliques) au lieu de guillemets simples ... Les guillemets simples sont des valeurs, des champs sont des contre-apostrophes.

INSERT INTO `moviedb`.`genre` SET `GenreID` = '18' , `GenreName` = 'Drama' ON DUPLICATE KEY UPDATE `GenreName` = VALUES(`GenreName`); 
INSERT INTO `moviedb`.`genre` SET `GenreID` = '16' , `GenreName` = 'Animation' ON DUPLICATE KEY UPDATE `GenreName` = VALUES(`GenreName`); 
+0

Ah, je n'aurais jamais compris ..... merci l'homme. – RonanC

+0

Toujours pas de joie, même erreur ..... – RonanC

+1

Est-ce exactement la même erreur? Comme l'a dit le Scrum Meister, enlevez le où dans la clé DUPLICATE ON ... il fera automatiquement la rangée là le doublon était. – Jacob

1
INSERT INTO `moviedb`.`genre` SET `GenreID` = '18' , `GenreName` = 'Drama' ON DUPLICATE KEY UPDATE `GenreName` = 'Drama' WHERE `GenreID` = '18' 
INSERT INTO `moviedb`.`genre` SET `GenreID` = '16' , `GenreName` = 'Animation' ON DUPLICATE KEY UPDATE `GenreName` = 'Animation' WHERE `GenreID` = '16' 

et vous êtes tous ensemble.

+0

merci, je l'ai trié avec un peu de every1 – RonanC

Questions connexes