2011-03-08 92 views
5

嗨,有人可以看看這個,並告訴我哪裏出錯了。 我有一個SQL語句,當我回聲使用PHP我得到這個屏幕MySQL上的重複密鑰更新問題

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' 

這裏是聲明

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

這是我收到的錯誤:

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 

任何幫助將不勝感激,在此先感謝。

回答

9

您不能將WHEREON DUPLICATE KEY合併。

刪除WHERE子句,MySql將只會更新導致重複鍵的行。

對於多行INSERT,使用VALUES()告訴MySQL來更新,將插入的值,例如:

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

感謝every1 .....花了很長時間試圖找出一個。 Every1值得打個勾。 – RonanC 2011-03-08 00:20:10

3

你引述MySQL的領域...

您應該使用反引號(`)而不是單引號......單引號是值的,反引號是字段。

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

啊赫克我永遠不會得到它.....謝謝你。 – RonanC 2011-03-08 00:08:23

+0

仍然沒有快樂,同樣的錯誤..... – RonanC 2011-03-08 00:11:11

+1

它是完全相同的錯誤?正如Scrum Meister所說的那樣,刪除ON DUPLICATE KEY中的位置......它將自動執行重複所在的行。 – Jacob 2011-03-08 00:13:02

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' 

和你所有的設置。

+0

謝謝我把它從every1中分出來 – RonanC 2011-03-08 00:22:39