如何檢查數據庫中是否存在重複條目?我不想阻止它,只是一個警告。所以如果它已經存在,它只是給出一個警告,取決於用戶是否忽略它。
在此先感謝!PHP MySQL檢查重複條目?
回答
$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);
}
謝謝!這很簡單,呵呵。如果我理解正確,它會檢查'$ result'是否爲true/not-null,對嗎? – 2011-03-21 13:54:01
實際上它檢查'$ result'內的行數。如果它不是零,那麼你有一個副本。 – Saul 2011-03-21 14:00:53
我使用:'if($ result)'而不是num_rows來檢查$ result是否爲true,是保存嗎? – 2011-03-21 14:01:50
另一種選擇是使用SELECT COUNT()查詢它會告訴你複製數量,而不是隻檢查任何行返回的。
SELECT COUNT(*) FROM table WHERE field = '$field'
如果使用NUM行的方法,這將是更有效的,如果你不選擇,當你不打算使用它們所有領域 - 不要讓MySQL的引擎的工作比更難它需要。
我做了一個友好的方式來處理重複的東西像用戶ID。例如,如果用戶輸入一個id約翰並且該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
}
}
歡迎來到SO,希望發佈。 ;) – vdbuilder 2012-11-02 18:53:22
我意識到這是一個老帖子,但我有錯誤,與選定的答案,因爲它總是會返回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,並觸發counter語句。
那麼假設我試圖知識產權的從我的數據庫進行比較,該列是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,但是這工作得很好,我的目的,並且不加載頁面時似乎會影響我的速度。
有點困惑,你是否試圖查看記錄是否存在比不運行插入命令,或者你想通過在mysql中使用鍵和其他約束來防止重複條目? – Incognito 2011-03-21 13:46:17
更好地使用['UNIQUE' constraint](http://dev.mysql.com/doc/refman/5.5/en/create-table.html)禁止重複值:「一個'UNIQUE'索引創建一個約束索引中的所有值必須是不同的。如果嘗試使用與現有行匹配的鍵值添加新行,則會發生錯誤。對於所有引擎,'UNIQUE'索引允許多個'NULL'值可以包含NULL的列。「 – Gumbo 2011-03-21 13:46:50
不,我只是想檢查一下,如果它已經存在,它會發出警告,用戶可以忽略它,但可以也取消它。 – 2011-03-21 13:47:29