2010-10-29 40 views
0

我的網站上有一個註冊/登錄系統,並且我做到了這樣,如果某人嘗試註冊一個已經在使用的用戶名,它在表單下面發佈錯誤。但是,不是發佈我創建的錯誤消息,而是返回MySQL錯誤「錯誤:查詢爲空」。以下是我正在嘗試使用的代碼:PHP - MySQL錯誤「錯誤:查詢是空的」當有人試圖用已經採取的用戶名註冊

 // checks if the username is in use 
    if (!get_magic_quotes_gpc()) { 
    $_POST['username'] = addslashes($_POST['username']); 
    } 
$usercheck = $_POST['username']; 
$check = mysql_query("SELECT username FROM userpass WHERE username = '$usercheck'") 
or die(mysql_error()); 
$check2 = mysql_num_rows($check); 

//if the name exists it gives an error 
if ($check2 != 0) { 
    $error = "Sorry, the username ".$_POST['username']." is already in use."; 
    }

我在做什麼錯?

感謝

+2

備註:**永遠不要**使用addslashes()來清理傳入數據。在輸出時使用'mysql_real_escape_string()',輸出時使用'htmlentities()' – 2010-10-29 10:05:12

+1

'addslashes'肯定是錯誤的 – Quassnoi 2010-10-29 10:05:40

+0

「查詢是空的」通常只在查詢確實爲空時纔會發生。您是否100%確定錯誤消息與您正在顯示的查詢有關? – 2010-10-29 10:06:04

回答

3

您所查詢的是廢話(SELECT用戶名...其中username = ...)

你必須做什麼是添加上用戶名UNIQUE約束,並直接試圖插入用戶在你的數據庫。如果用戶名已經存在,查詢將返回一個錯誤。

ALTER TABLE user ADD UNIQUE (username) 

只需嘗試插入具有現有ID的用戶。

+0

感謝您的回覆。我是新來的,所以你能解釋我怎麼能做到這一點?謝謝 – Taimur 2010-10-29 10:10:26

+0

這不是「廢話」,它是有效的SQL。如果沒有匹配WHERE子句的行存在,則查詢返回空結果集;另一方面,如果任何行匹配,則返回。 – Hammerite 2010-10-29 10:45:05

+0

所以你知道我怎樣才能使它如此,如果沒有行匹配,它不會給mysql錯誤? – Taimur 2010-10-29 10:51:37