PHP MySQL检查重复条目?

时间:2011-03-21 13:44:21

标签: php mysql


如何检查数据库中是否存在重复条目?我不想阻止它,只是一个警告。因此,如果它已经存在,它只是发出警告,由用户决定是否忽略它 提前谢谢!

5 个答案:

答案 0 :(得分:7)

$key_id = 123;

$result = mysql_query("SELECT * FROM table WHERE key_id='$key_id'");
$num_rows = mysql_num_rows($result);

if ($num_rows) {
   trigger_error('It exists.', E_USER_WARNING);
}

答案 1 :(得分:4)

我做了一个更友好的方法来处理类似用户ID的重复项。例如,如果用户输入了id john并且该ID已经存在,则它将自动更改为john1。如果john1存在,它将自动更改为john2等。

    // Force the while statement to execute once
    $usercount = 1;
    // The number to append to the duplicate value
    $incrementcount = 0;
    // Store the original value
    $origuserid = $userid;

    while ($usercount != 0) { // Query the database for the current ID
      $query = "SELECT COUNT(*) FROM userlist WHERE userid = '$userid'";
      if ($stmt = $con->prepare($query)) {
          $stmt->execute();                                                                           
          $stmt->close();
          $stmt->bind_result($usercount);
          $stmt->fetch();
       } else {
         die('Query error');
      }
    if ($usercount != 0) { 
    // if count is anything other than zero, it's a duplicate entry
          $incrementcount++; // value to append
          $userid = $origuserid . $incrementcount; // append value to original user id
          // the while loop will execute again and keep incrementing the value appended
          // to the ID until the value is unique
         }
     }

答案 2 :(得分:2)

答案 3 :(得分:0)

另一种选择是使用SELECT COUNT()查询,该查询将告诉您重复的次数,而不仅仅是检查返回的任何行。

SELECT COUNT(*) FROM table WHERE field = '$field'

如果使用num rows方法,如果在不打算使用它们时不选择所有字段会更有效 - 不要让MySQL引擎更难以工作。

答案 4 :(得分:0)

我意识到这是一篇旧帖子,但我对所选答案有错误,因为当它是假的时候总是会返回true,完全从上面的答案中复制,所以我写了一个小的变化。

function checkValid($ipCheck){
    $con=mysqli_connect("localhost","******","******","$DB_NAME");

    $result = mysqli_query($con,"SELECT * FROM $TBL_NAME");
    $end = true;
    while($row = mysqli_fetch_array($result) && $end)
    {
        if(strcmp($row['IP'],$ipCheck) == 0)
            $end = false;
    }   
    return $end; 
}

这是做什么的,它会扫描所有内容,直到它达到错误的陈述。如果没有,那么它将保持为真,意味着没有重复,继续前进,否则,它找到重复并返回false,并触发计数器语句。

所以假设我正在尝试比较我的数据库中的IP,该列是IP:

if (!empty($_SERVER['HTTP_CLIENT_IP'])){
    $ip=$_SERVER['HTTP_CLIENT_IP'];
//Is it a proxy address
}elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])){
    $ip=$_SERVER['HTTP_X_FORWARDED_FOR'];
}else{
    $ip=$_SERVER['REMOTE_ADDR'];
}
if(checkValid($ip)){
    $sql = "INSERT INTO $TBL_NAME (IP) VALUES ('$ip')";
    if (!mysqli_query($con,$sql))
    {
        die('Error: ' . mysqli_error($con));
    }
}
else
    echo "IP Already Exists In Database";

我对PHP非常陌生,但这对我的目的来说效果很好,而且在加载页面时似乎不会影响我的速度。