2014-11-04 58 views
0

我在PHP編寫以下命令:MySQL的自動遞增和獨特的領域

$query="insert into tableone (user_name, password, name, email) values('$user_name', '$password', '$name', '$email')"; 
if(mysql_query($query)) 
{          
    header("Location:thislocation.php"); 
} else { 
    echo '<br><br><font color="red"><strong>Username or EmailId already exists. Please try different Username.<br> If you have forgotten your Password <a href="forgotmypassword.php" title="Forgot Password?" alt="Forgot Password?"><u><i>click here</i></u></a>.</strong></font><br>'; 
} 

這裏在MySQL-DB我做了名字和電子郵件領域的獨特和ID自動遞增,所以沒有兩個人有相同的註冊記錄。問題是,如果有人使用相同的用戶名或電子郵件,則查詢失敗,否則執行語句。但是,它會自動增加id,而不會在db中添加記錄。如果之後有人註冊成功,他會得到一個不比前一個更多的ID。

如何讓自動遞增一次?

+0

爲什麼要這麼做呢?這只是一個ID,無論如何帳戶被刪除時,你會得到空白。 – 2014-11-04 08:49:38

+0

在保存之前添加驗證。 – 2014-11-04 08:50:05

+0

在插入 – TBI 2014-11-04 08:50:16

回答

0

你需要做的是在插入它之前運行一個num_rows。什麼NUM_ROWS這樣做,這算多少記錄SELECT回報,因此如果它返回1,在那裏有一個匹配數據庫中的一個地方,如果它返回0,沒有匹配

$selectSql = "SELECT * FROM tableone WHERE name= '".$name."' OR email = '".$email."'"; 
$result = mysql_query($selectSql, $YOUR_DATABASECONNECTION); 
$num_rows = mysql_num_rows($result); 
if($num_rows){ 
echo "email or name is already taken"; 
}else{  
$query="insert into tableone (user_name, password, name, email) values('$user_name', '$password', '$name', '$email')"; 
    if(mysql_query($query)) 
    {          
     header("Location:thislocation.php"); 
    } else { 
     echo '<br><br><font color="red"><strong>Username or EmailId already exists. Please try different Username.<br> If you have forgotten your Password <a href="forgotmypassword.php" title="Forgot Password?" alt="Forgot Password?"><u><i>click here</i></u></a>.</strong></font><br>'; 
    } 
} 

這是一個很好的方法來確保你所說的錯誤不會發生

+0

這是不正確的。儘管你的答案被接受了,但這是遠遠不夠的。你不用PHP檢查記錄是否存在。 PHP和MySQL之間存在網絡延遲和處理開銷。當你在你的代碼中發現沒有這樣的用戶時,另一個進程可能會這樣做 - 最終會有2個用戶收到誤報。你所說的是,你可以通過PHP來確保這一點。不,你不能,不是100%。 – 2014-11-04 09:25:34

3

有沒有真正的修復;這是自動增量ID的工作方式。 ID不是設計成「乾淨」的,它們被設計爲滿足需要能夠將數據鏈接在一起的需要。

對於您的數據庫來說,保持它們的順序和(這裏最重要的部分)是無人關心的,無論它們是否對齊,這將是一個巨大的工作量。它們是沒有真實世界含義的數字(根據數據庫ID的定義),所以對它們沒有任何關係。

他們「按順序」的唯一原因通常是因爲它是生成它們的簡單方法。

+0

非常感謝,但如果我想統計總數沒有。的用戶通過我的ID? – user3798282 2014-11-04 08:55:09

+1

你沒有。您可以通過COUNT查詢來統計用戶數量。 – Erik 2014-11-04 08:59:01

+0

@sgt它是答案。 'id'僅爲數據庫的含義,以跟蹤行。這些數字應該在失敗的插入時被丟棄,這就是我們確保併發訪問是原子性的。人們總是希望保持自動增量的一致性,實際上 - 這並不重要。如果是1並且接下來是1500 - 那又如何?它的工作是唯一識別一個記錄,而不是滿足某人的強迫症。 – 2014-11-04 09:26:55