如何设置mysql表以用于UPDATE WHERE语句

时间:2009-11-13 07:49:32

标签: mysql create-table sql-update

我有一个存储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;

2 个答案:

答案 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 将不会替换您的变量