我创建了一个名为register.php
的文件,它记录每个用户的用户ID。我的搭档创建了自己的版本。在我们的数据库中,默认情况下我是用户ID 1,他是用户ID 2.我们都有4个额外的用户。我遇到的问题是我从我的数据库中删除了所有用户,但每当新成员注册到我的网站时,他们的用户ID是7和更高 - 而不是2(这是我的正确)。任何人都可以帮我解决这个问题吗?
我缩短的数据库:
CREATE TABLE `users` (
`user_id` int(100) not null auto_increment,
`user_name` varchar(50) not null,
`user_pass` varchar(100) not null,
`user_email` varchar(255) not null,
PRIMARY KEY (`user_id`),
UNIQUE KEY (`user_name`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8_unicode_ci AUTO_INCREMENT=8;
现在这里是Sql:
$sql = "INSERT INTO
users(user_name, user_pass, user_email , user_date , user_level)
VALUES('" . mysql_real_escape_string($_POST['user_name']) . "',
'" . $ip . "',
'" . sha1($_POST['user_pass']) . "',
'" . mysql_real_escape_string($_POST['user_email']) . "',
NOW(),
0)";
答案 0 :(得分:1)
您必须重置表格上的自动增量,因此在删除后会生成编号较小的用户ID。
ALTER TABLE mytable AUTO_INCREMENT = 3
http://www.electrictoolbox.com/reset-auto-increment-value-mysql/
答案 1 :(得分:1)
定义表时,您要声明以下字段以自动递增:
`user_id` int(100) not null auto_increment,
这意味着数据库将保留其最后一次增量的独立值。这可确保每个新行都具有唯一的user_id。
您可以使用以下SQL将其重置为某个数字:
ALTER TABLE mytable AUTO_INCREMENT = {the number you want};
但是,如果删除一些但不是所有用户,这将导致问题。如果您有1-7用户,删除用户ID 5,并将自动增量重置为5,并添加三个用户,您将拥有1-7的用户,但您将拥有6和7的重复项。这不是很好对于一个独特的索引。
通常,唯一ID不是面向用户的,因此实际值无关紧要。在此解决方案中,您为用户提供了另一个面向用户的标识符。这可以是散列数,用户名或其他完全(如图片)。用户ID只是一个保持数据完整性的钩子。
另一种方法是,当您插入新用户时,您将在数据库中扫描第一个未使用的号码。这虽然计算成本很高,但其好处尚不清楚。
对于最干净的代码,请准确确定user_id应该代表什么,并单独使用它。然后构建您的程序来表示该抽象。