如何检查数据库中是否存在重复条目?我不想阻止它,只是一个警告。因此,如果它已经存在,它只是发出警告,由用户决定是否忽略它
提前谢谢!
答案 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非常陌生,但这对我的目的来说效果很好,而且在加载页面时似乎不会影响我的速度。