2011-03-08 27 views
5

Hola, alguien podría ver esto y decirme dónde me estoy equivocando. tengo una instrucción SQL que cuando se hacen eco utilizando php me sale esto a la pantallaMySQL ON DUPLICATE KEY UPDATE issue

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' 

Y aquí es la declaración

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

Este es el error que recibo:

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 

Cualquier ayuda sería muy apreciada, gracias de antemano.

Respuesta

9

No se puede combinar un WHERE con un ON DUPLICATE KEY.

Elimine la cláusula WHERE, MySql solo actualizará la fila que causa la clave duplicada.

Para una fila de varios INSERT, utilice el VALUES() a decir a MySQL para actualizar el valor que se inserta DE, ejemplo:

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

Gracias every1 ..... pasé tanto tiempo tratando de resolver eso. Every1 merece un tic. – RonanC

3

Usted está citando los campos de MySQL ...

Debe utilizar comillas invertidas (`) en lugar de comillas simples ... Las comillas simples son los valores, acentos abiertos son para los campos.

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, diablos, nunca lo habría conseguido ... gracias hombre. – RonanC

+0

Todavía no hay alegría, el mismo error ..... – RonanC

+1

¿Es exactamente el mismo error? Como dijo The Scrum Meister, elimine el lugar en la tecla DUPLICADA EN ON ... automáticamente hará la fila allí donde estaba el duplicado. – 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' 

y ya está todo listo.

+0

gracias lo tengo ordenado con un poco de cada1 – RonanC

Cuestiones relacionadas