mysql自动增量和唯一字段

时间:2014-11-04 08:47:12

标签: php mysql unique auto-increment

我在php中编写以下命令:

$query="insert into tableone (user_name, password, name, email) values('$user_name', '$password',   '$name', '$email')";
if(mysql_query($query))
{                                       
    header("Location:thislocation.php");
} else {
    echo '<br><br><font color="red"><strong>Username or EmailId already exists. Please try different Username.<br> If you have forgotten your Password <a href="forgotmypassword.php" title="Forgot Password?" alt="Forgot Password?"><u><i>click here</i></u></a>.</strong></font><br>';
}

在mysql-db中,我将name和email字段设为唯一,id为auto increment,这样就没有两个人拥有相同的注册记录。问题是,如果有人使用相同的用户名或电子邮件,查询将失败并执行else语句。但是,它会自动增加id,而不会在db中添加记录。如果有人成功注册后,他获得的ID不会超过前一个。

如何自动增加一次?

2 个答案:

答案 0 :(得分:3)

没有真正的解决办法;这是自动增量ID的工作方式。 ID并非设计为“干净”,它们旨在满足将数据链接在一起的需求。

对于您的数据库来说,保持它们的顺序并且(这是最重要的部分)将是一项巨大的工作,没有人关心它们是否已经对齐。它们是没有真实世界意义的数字(根据数据库ID的定义),因此它们无关紧要。

他们“正常”的唯一原因通常是因为它是一种生成它们的简单方法。

答案 1 :(得分:0)

在插入之前,您需要做的是在其上运行num_rows。 num_rows做什么,它计算SELECT返回的记录数,所以如果它返回1,数据库中有一个匹配的地方,如果它返回0,则没有匹配

$selectSql = "SELECT * FROM tableone WHERE name= '".$name."' OR email = '".$email."'";
$result = mysql_query($selectSql, $YOUR_DATABASECONNECTION);
$num_rows = mysql_num_rows($result);
if($num_rows){
echo "email or name is already taken";
}else{    
$query="insert into tableone (user_name, password, name, email) values('$user_name', '$password',   '$name', '$email')";
    if(mysql_query($query))
    {                                       
        header("Location:thislocation.php");
    } else {
        echo '<br><br><font color="red"><strong>Username or EmailId already exists. Please try different Username.<br> If you have forgotten your Password <a href="forgotmypassword.php" title="Forgot Password?" alt="Forgot Password?"><u><i>click here</i></u></a>.</strong></font><br>';
    }
}

这是一种安全的好方法,你所谈论的错误不会发生