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

如何使用PHP验证SQL中的重复条目?,php,mysql,Php,Mysql,我试图在提交重复条目时验证并向用户显示一条消息。此外,每当用户第一次注册时,我都会使用此验证在数据库中生成一个条目。我知道我的代码可能会受到SQL注入的影响,但在本练习中我并不担心这一点 我的表有一个主键“RUT”,它是唯一的。我需要验证用户是否已经在数据库中提交了RUT 代码: 我假设这是一封不可复制的电子邮件。因此,在提交表单时,您可以首先使用特定的电子邮件id选择数据,如下所示: $sql = "select *from table where email ='".$email."

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

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

代码:


我假设这是一封不可复制的电子邮件。因此,在提交表单时,您可以首先使用特定的电子邮件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.
    }
两点意见:

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


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

添加一个跨越多列的唯一索引。这些答案中可能存在的重复与我的问题类似。我试图用验证来达到目的。你认为“重复条目”是什么?两个客户都有相同的习惯?我碰巧喜欢使用
(如果存在的话)
,因为对我来说,这让(人类)读者更清楚地知道查询应该做什么。
    $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.
    }
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;