如何使用PHP验证SQL中的重复条目?

时间:2017-06-22 03:01:40

标签: php mysql

我试图在提交重复条目时验证并向用户显示消息。此外,每当用户第一次注册时,我都会使用此验证在我的数据库中生成一个条目。我知道我的代码可能会被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);
    };

3 个答案:

答案 0 :(得分:0)

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

Comparator

答案 1 :(得分:0)

IF (SELECT 1 = 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;

答案 2 :(得分:0)

两条评论:

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

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