2009-11-13 54 views
0

我有一個表,我存儲userinfo。每個用戶都有一個唯一的用戶標識,但其他信息各不相同。如何設置一個MySQL表與UPDATE WHERE語句一起使用

當我嘗試運行一個語句更新該表,其中userid = $ userid,我得到一個Duplicate entry 'XXX' for key 'userid'其中XXX是他們的userid。

我有userid字段設置爲唯一的,但顯然是做某事錯了什麼地方。

這裏是我的發言

UPDATE `users` SET `screenname` = '$screenname' ,`real_name` = '$real_name' ,`profimg` = '$profimg' WHERE `userid` = '$userid' 

表結構

CREATE TABLE `users` (
    `userid` int(11) NOT NULL, 
    `screenname` text COLLATE utf8_unicode_ci NOT NULL, 
    `real_name` text COLLATE utf8_unicode_ci NOT NULL, 
    `profimg` text COLLATE utf8_unicode_ci NOT NULL, 
    UNIQUE KEY `userid` (`userid`) 
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; 
+0

你使用PHP來做查詢嗎? – RageZ 2009-11-13 07:55:09

+1

thta的很奇怪,Mysql基本上說你試圖做INSERT,而不是UPDATE。檢查你的代碼。 – dusoft 2009-11-13 07:58:27

+0

<?回聲「是的,我是」; ?> – mrpatg 2009-11-13 07:58:51

回答

2

你應該使用,而不是唯一索引的主鍵索引的第一位。初級密鑰索引禁用空條目,儘管您將該列設置爲NOT NULL,但最好使用PK索引,因爲該列實際上是該表的主鍵。

嘗試重新定義你的表是這樣的:

CREATE TABLE `users` (
    `userid` int(11) NOT NULL, 
    `screenname` text NOT NULL, 
    `real_name` text NOT NULL, 
    `profimg` text NOT NULL, 
    PRIMARY KEY `useridKey` (`userid`) 
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; 

你也可以看看在AUTO_INCREMENT collumn屬性。
也請務必逃避你的變量,然後把它們放入你的查詢來取消sql注入...

1

我認爲你正在使用PHP。你把查詢用雙引號像

$sql = "UPDATE foobar SET bar = '$foo' WHERE id = '$id'"; 

如果使用單引號PHP 不會取代的變量

相關問題