首页 > 解决方案 > 插入数据库的数据,即使它已经存在

问题描述

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

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')");
  }

?>

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

标签: phpmysql

解决方案


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的列上添加一个emaildatabase
  2. 立即使用INSERT IGNORE,因此如果未使用电子邮件,它将插入,如果已使用电子邮件,则忽略

最后,使用准备语句和绑定参数来避免 SQL 注入!

希望能帮助到你


推荐阅读