LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 2373|回复: 21

数据库记录插入出现了一个意想不到的错误

[复制链接]
发表于 2006-12-1 07:51:25 | 显示全部楼层 |阅读模式
我做的一个站,在一个数据表里面,用户注册数达到1万七千多的时候,

今天突然出现了一个错误,也就是有一个人竟然在同一时间注册了两个用户名,并且ID是一样的,这

个情况是第一次出现,此前和些后都没有再出现这种情况,是怎么回事.

用户ID,我在处理注册的程序里面都有安排好的,也就是每个新用户的ID是所有用户的最大ID加1

怎么会出现有两个ID相同的情况呢?请高手告诉我一下.
发表于 2006-12-1 09:49:56 | 显示全部楼层
程序bug吧,建议id改用自增的
回复 支持 反对

使用道具 举报

发表于 2006-12-1 16:49:59 | 显示全部楼层
字段没有建立unique索引吧,导致出现重复记录


建议用Auto_increment
回复 支持 反对

使用道具 举报

发表于 2006-12-1 18:52:00 | 显示全部楼层
如果你一定要用php自己做id,就需要做好同步。在获取最大ID之前锁定某个文件,+1,insert到数据库里后,才解除锁定。这样才能保证id增长的运算过程不会并发。
回复 支持 反对

使用道具 举报

发表于 2006-12-1 20:57:50 | 显示全部楼层
id要用php控制?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-12-2 09:47:21 | 显示全部楼层

我先把处理注册入库的代码贴出来吧

$query = "select tid from ask_member order by tid desc limit 1 ";
$result = mysql_db_query($DataBase, $query);
$r = mysql_fetch_array($result);
$tid=$r[tid]+1;


$ip = $_SERVER["REMOTE_ADDR"];
$dbtime=date("Y-m-d H:i:s");


$query = "INSERT INTO ask_member (tid,username,password,email,truename,sex,jiaoyu,school,study,year,month,prov,city,ip,dtime,score,logintime,phonelook,emaillook,info) VALUES ('$tid','$_POST[username]','$_POST[password]','$_POST[email]','$_POST[truename]','$_POST[sex]','$_POST[jiaoyu]','$_POST[school]','$_POST[study]','$_POST[year]','$_POST[month]','$_POST[TPL_prov]','$_POST[TPL_city]','$ip','$dbtime','200','$dbtime','$_POST[emaillook]','$_POST[emaillook]','')";



上面是我处理注册用户并放入数据库的主要程序,请帮我看一下有没有什么问题.
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-12-2 09:51:51 | 显示全部楼层

你说得很对呀

Post by formalin14
如果你一定要用php自己做id,就需要做好同步。在获取最大ID之前锁定某个文件,+1,insert到数据库里后,才解除锁定。这样才能保证id增长的运算过程不会并发。



我仔细想了一下,有可能是两个人同时注册的时候,程序计算出了原来同样的最大ID,所以才造成两个ID一样的情况出现

在获取最大ID前,请问我该怎么锁定文件呀?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-12-2 09:53:16 | 显示全部楼层

请告诉我一个好的方法

Post by quhan
id要用php控制?



你认为最好的控制ID的方法是怎样来控制,特别是对每天注册用户在一千以上的站,也就是注册比较频繁的站点.请告诉我一下,不胜感激.
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-12-2 09:54:29 | 显示全部楼层

Auto_increment是什么呀

Post by nbxmedia
字段没有建立unique索引吧,导致出现重复记录


建议用Auto_increment




"Auto_increment" 是什么意思呀,也可能在程序里面用吗
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-12-2 09:55:14 | 显示全部楼层

怎么改自增呀

Post by Mystorier
程序bug吧,建议id改用自增的


怎么改自增呀,能不能说详细点,thank you
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表