2010-03-23 103 views
1

將數據輸入到數據庫之前,我只想檢查數據庫中是否已有數據庫中的相同用戶名。在輸入數據之前檢查數據庫中的重複

我把SQL中的用戶名設置爲一個鍵,所以它不能在這一端重複,但我正在尋找一個更加用戶友好的錯誤消息,然後「KEY已經存在」。

是否有簡單的方法來檢查變量值是否已經存在於一行中?

回答

3

可以在嘗試插入之前執行檢查,或者捕獲異常並在應用程序中以更乾淨和用戶友好的方式顯示它。

編輯:看看this tutorial on PHP exception handling。你可能想換你的查詢執行在一個try-catch塊,像這樣:

try 
{ 
    // do your query here (it's been forever since I've used PHP) 
} 
catch(Exception $e) 
{ 
    // display a clean error to the user 
} 

除,而不是抓住一個通用型Exception,你要弄清楚你實際上是什麼樣的異常(例如MySQLDuplicateKeyException,或者其他任何東西 - 迴應測試時得到的異常,並使用它)。這樣,如果實際上存在另一個問題(例如DB連接錯誤),則不會顯示通知用戶現有用戶名的錯誤。

祝你好運!

+0

這聽起來和我想要做的完全一樣。 你如何捕捉異常?你有解釋它的鏈接嗎? 我試圖用google搜索到不了,但是我的關鍵字保存在一個已經填充的數據庫中,導致「如何檢查重複條目的數據庫」。 – 2010-03-23 02:40:35

+0

非常感謝Mike!這正是我要找的。 – 2010-03-23 02:58:55

0

我可以想出兩種方法來做到這一點。

第一種方法是事先在該用戶名上執行select語句以檢測任何重複項。如果一行被返回,那麼你知道該用戶名已經存在。

另一個是你可以讓mysql使用mysql_errno返回錯誤號,那麼你可以簡單地有一個if語句來檢查一個特定的錯誤號。唯一的問題是,它可能無法指示哪個字段是密鑰的副本。

我在腳本中使用了預選語句。

2

,以檢查是否存在數據的技術是發出查詢:

SELECT COUNT(*) FROM YourTable WHERE YourKeyCol = YourKeyValue 

,然後檢查數據集中的唯一返回行的第一列返回。如果它包含0,則數據不在那裏,否則會被找到。

但正如其他人所指出的,您可以繼續併發出您的INSERT。檢查錯誤代碼以確定它是否失敗。這是更高性能的,因爲對於數據尚未存在於數據庫中的情況,您將只執行一個查詢而不是兩個。

2

可能有special way這取決於您正在使用的RDBMS。 例如,使用MySQL,你可以說

INSERT INTO table (username,value) VALUES ('foo',123) ON DUPLICATE KEY UPDATE value = 123; 

既然你已經設置username是唯一的關鍵,這將插入('foo',123)table只有當foo是不是已經在表中。如果確實存在,則更新value

或者,你可以使用類似

INSERT IGNORE INTO table (username,value) VALUES ('foo',123) 

而忽略插入如果foo已經在表中。

+0

我以前從來沒有聽說過插入忽略。棒極了。 – 2010-03-23 14:32:19