0

我有一个存储用户信息的表。每个用户都有一个唯一的用户 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;
4

2 回答 2

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列属性。
还要确保在将变量放入查询以否定 sql 注入之前对其进行转义...

于 2009-11-13T08:03:52.910 回答
1

我认为您正在使用 PHP。您是否将查询放在双引号中,例如

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

如果你使用单引号 PHP不会替换你的变量

于 2009-11-13T07:53:47.983 回答