【问题标题】:How to validate duplicate entry in SQL using PHP?如何使用 PHP 验证 SQL 中的重复条目?
【发布时间】:2020-01-22 14:38:48
【问题描述】:

每当提交重复条目时,我都会尝试验证并向用户显示一条消息。此外,每当用户第一次注册时,我都会使用此验证在我的数据库中生成一个条目。我知道我的代码可能受到 SQL 注入攻击,但在本练习中我并不担心。

我的表有一个主键“RUT”,它是唯一的。我需要验证用户是否已在数据库中提交 RUT。

代码:

$datos; 

    @$db = mysqli_connect("localhost","root","","speedomart");

    if($db){
        $sql = "insert into cliente values('".$rut."','".$nombre."','".$apellido."','".$correo."','".$pass."')";
        $query = $db->prepare($sql);
        $query ->execute();
        if(mysql_errno() == 1062){
                   $datos = array('mensaje' => "no fue posible insertar datos");
                   echo json_encode($datos);
         }
        else{    
              $sql2 = "insert into carrito values(NULL,'".$rut."')";
              $query = $db->prepare($sql2);
              $query ->execute();    
              $datos = array('mensaje' => "Registrado correctamente");
              echo json_encode($datos);
           };
    }
   else{
          $datos = array('mensaje' => "No hay conexion.");
          echo json_encode($datos);
    };

【问题讨论】:

标签: php mysql


【解决方案1】:

我假设这是不能重复的电子邮件。因此,当您提交表单时,您可以首先使用特定的电子邮件 ID 选择数据,如下所示:

    $sql = "select *from table where email ='".$email."'";
            $query = $db->prepare($sql);
            $user_array = $query ->execute();

    if(count($user_array) > 0){
       //You can use insert query here 
    }else{
       //email already exist.
    }

【讨论】:

    【解决方案2】:

    两个cmets:

    (1) 如果“数据的性质是”任何字段或特定字段组合都不应该有重复项,那么您应该定义一个UNIQUE 索引,以便 SQL 将绝不允许以任何方式插入重复项。 (如果现在存在任何重复项,您将无法创建这样的索引。) 这是 SQL 将为您强制执行的“数据完整性规则”。

    (2) SQL 注入在这里很容易避免,您应该始终这样做。只需在 SQL 查询文本中使用 parameters?(不带引号……这不是单字符文字字符串)。现在,您只需在每次执行准备好的 SQL 时提供一组参数值替换。参数将按出现顺序从左到右替换。这不仅避免了注入问题,而且效率更高:不必每次都重新准备语句。请养成一直这样做的习惯......你会很高兴你这样做了。

    【讨论】:

      【解决方案3】:
      IF Exists(SELECT 1 FROM Table WHERE FieldValue='$') THEN
         --record exists, get ID you need.
         BEGIN
           SELECT TableID FROM Table WHERE FieldValue='$';
         END;
      ELSE
      BEGIN
          INSERT INTO Table (FieldValue) VALUES('$');
          SELECT LAST_INSERT_ID() AS TableID;
      END;
      END IF;
      

      【讨论】:

      • 我碰巧喜欢使用IF EXISTS,因为对我来说,它让(人类)读者更清楚查询应该做什么。 . .
      猜你喜欢
      • 2017-09-07
      • 1970-01-01
      • 1970-01-01
      • 2010-09-19
      • 2014-12-07
      • 2015-02-07
      • 2023-03-30
      • 2013-09-01
      • 1970-01-01
      相关资源
      最近更新 更多