插入数据库中的数据(即使已经存在)

时间:2019-07-01 09:44:45

标签: php mysql

我目前正在用PHP编写注册脚本,我的问题是即使数据已经存在,数据仍然插入数据库中。这可能是一些愚蠢的错误,或者我需要其他{}语句,或者我真的不知道。事实是,即使电子邮件已经存在于数据库中,它仍然会输入它。 它确实显示错误就可以了。

if(filter_var($email,FILTER_VALIDATE_EMAIL)){
    $email = filter_var($email,FILTER_VALIDATE_EMAIL);
    $email_check = mysqli_query($con, "SELECT email FROM database WHERE email='$email'");
    $num_rows = mysqli_num_rows($email_check);
    if($num_rows>0){
        echo "The email is already in use.<br>";
    }

        $query = mysqli_query($con,"INSERT INTO database VALUES (NULL,'$username','$name','$email','$pwh','$date')");
  }

?>

如果电子邮件已在使用中,则会显示回显“电子邮件已在使用中”。很好,但仍会插入它。我想念什么?我已经尝试使用'else'变量,但没有任何帮助。

3 个答案:

答案 0 :(得分:3)

您的if仅回声,然后无论如何您都执行INSERT。一些解决方案:

if(filter_var($email,FILTER_VALIDATE_EMAIL)){
    $email = filter_var($email,FILTER_VALIDATE_EMAIL);
    $email_check = mysqli_query($con, "SELECT email FROM database WHERE email='$email'");
    $num_rows = mysqli_num_rows($email_check);
    if($num_rows>0){
        echo "The email is already in use.<br>";
    }
// ADD A ELSE SO YOU INSERT IF YOU HAVE NOTHING
    else {
        $query = mysqli_query($con,"INSERT INTO database VALUES (NULL,'$username','$name','$email','$pwh','$date')");
    }    
  }

现在您也可以从数据库中阻止它:

  1. 在表UNIQUE INDEX的列email上添加database
  2. 立即使用INSERT IGNORE,因此如果未使用电子邮件,它将插入;如果已经使用电子邮件,则忽略

最后,使用prepare语句并将参数绑定到avoind SQL注入!

希望有帮助

答案 1 :(得分:0)

您的条件还不错,但是您继续进行插入操作。这是因为您已将其放在if之外。

您应该做的是:

if(!$num_rows <= 0){
    <insert statement>;
}
else {
 echo "The email is already in use.<br>";
}

答案 2 :(得分:-1)

将此语句写在else块中

!