2009-11-13 53 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 不会取代的变量

相关问题