將數據輸入到數據庫之前,我只想檢查數據庫中是否已有數據庫中的相同用戶名。在輸入數據之前檢查數據庫中的重複
我把SQL中的用戶名設置爲一個鍵,所以它不能在這一端重複,但我正在尋找一個更加用戶友好的錯誤消息,然後「KEY已經存在」。
是否有簡單的方法來檢查變量值是否已經存在於一行中?
將數據輸入到數據庫之前,我只想檢查數據庫中是否已有數據庫中的相同用戶名。在輸入數據之前檢查數據庫中的重複
我把SQL中的用戶名設置爲一個鍵,所以它不能在這一端重複,但我正在尋找一個更加用戶友好的錯誤消息,然後「KEY已經存在」。
是否有簡單的方法來檢查變量值是否已經存在於一行中?
可以在嘗試插入之前執行檢查,或者捕獲異常並在應用程序中以更乾淨和用戶友好的方式顯示它。
編輯:看看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連接錯誤),則不會顯示通知用戶現有用戶名的錯誤。
祝你好運!
我可以想出兩種方法來做到這一點。
第一種方法是事先在該用戶名上執行select語句以檢測任何重複項。如果一行被返回,那麼你知道該用戶名已經存在。
另一個是你可以讓mysql使用mysql_errno返回錯誤號,那麼你可以簡單地有一個if語句來檢查一個特定的錯誤號。唯一的問題是,它可能無法指示哪個字段是密鑰的副本。
我在腳本中使用了預選語句。
,以檢查是否存在數據的技術是發出查詢:
SELECT COUNT(*) FROM YourTable WHERE YourKeyCol = YourKeyValue
,然後檢查數據集中的唯一返回行的第一列返回。如果它包含0,則數據不在那裏,否則會被找到。
但正如其他人所指出的,您可以繼續併發出您的INSERT。檢查錯誤代碼以確定它是否失敗。這是更高性能的,因爲對於數據尚未存在於數據庫中的情況,您將只執行一個查詢而不是兩個。
可能有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
已經在表中。
我以前從來沒有聽說過插入忽略。棒極了。 – 2010-03-23 14:32:19
這聽起來和我想要做的完全一樣。 你如何捕捉異常?你有解釋它的鏈接嗎? 我試圖用google搜索到不了,但是我的關鍵字保存在一個已經填充的數據庫中,導致「如何檢查重複條目的數據庫」。 – 2010-03-23 02:40:35
非常感謝Mike!這正是我要找的。 – 2010-03-23 02:58:55