我有一个存储userinfo的表。每个用户都有一个唯一的用户ID,但其余的信息各不相同。
当我尝试运行一个语句来更新该表,其中userid = $ userid时,我得到一个Duplicate entry 'XXX' for key 'userid'
,其中XXX是他们的用户ID。
我将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 :(得分:2)
首先,您应该使用主键索引而不是唯一索引。 primarey键索引禁用空条目,虽然您将collumn设置为NOT NULL,但最好使用PK索引,因为collumn实际上是表的主键。
尝试重新定义你的表:
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 :(得分:1)
我认为您正在使用PHP。你把查询放在双引号中,如
$sql = "UPDATE foobar SET bar = '$foo' WHERE id = '$id'";
如果您使用单引号PHP 将不会替换您的变量