php - 数据插入到数据库中,即使它已经存在

标签 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”变量但没有任何帮助。

最佳答案

您的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. 在表数据库email列上添加UNIQUE INDEX
  2. 现在使用 INSERT IGNORE,因此如果电子邮件未使用,则会插入,如果电子邮件已使用,则会忽略

最后,使用准备语句并绑定(bind)参数来避免 SQL 注入(inject)!

希望对你有帮助

关于php - 数据插入到数据库中,即使它已经存在,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56833377/

相关文章:

php - 如何将网址更新到搜索引擎和其他更新服务

php - 根据数据库表中的第一个下拉列表而不使用javascript填充第二个下拉列表

php - 格式化多个 SQL 列或在 php 中执行

javascript - jQuery |当有多个相同ID时获取值的显示

php - 内容未通过 SSL 加载

javascript - JS : Uncaught SyntaxError: Unexpected token '<' in browser console when using <? php echo json_encode($_SESSION['

php - Yii: php -> 无法在 SiteController 中执行 SQL 命令

php - 如何获取 WordPress 查询受影响的行数?

php - 如何检查数据库中是否不存在一行

php - 优雅的数据库设计帮助...(MySQL/PHP)