2011-11-13 77 views
0

我有:MySQL查詢怪怪

mysql_connect($host,$username,$password); 
@mysql_select_db("db") or die("Error: Cannot select database"); 
$query = "select password from users where name = '".$_POST['login-userid']."'"; 
$result = mysql_query($query); 

if ($result == false) { 
    echo "Invalid username or password"; 
} else { 
    if (mysql_result($result,0) == hash('sha256', $_POST['login-password'])) { 
     echo "Logging in..."; 
    } 
} 

出於某種原因,我不斷收到一個錯誤的mysql_result線,即使它不應該被執行(當用戶名不存在,即$ result的結果爲false)。

回答

3

mysql_query只會在出現錯誤時返回false。在這種情況下,沒有錯誤,只有0行。

您需要使用mysql_num_rows來獲取返回的行數。

+0

這工作。我不敢相信我以前沒有想到過。 – n0pe

2

你可以var_dump($result)並查看值,如果它是一個資源(根據php),那麼你的查詢是成功的,如果不是false則返回。這是一個布爾錯誤,但如果確實返回false,則仍應尊重您的==。

+0

我用'var_dump'檢查,它的確是一種資源。但是,我知道在我的數據庫中沒有與用戶名匹配的'login-userid'。這怎麼可能? – n0pe

+0

爲了調試你需要'var_dump($ _ POST ['login-userid'])'並確保這個值是你所期望的。當你使用它來查詢數據庫的'name'列時,你會命名$ _POST var'login-userid',這很奇怪。 –

0
mysql_query($query); 

返回查詢的結果集。它不返回truefalse.

您可以使用mysql_num_rows()檢查是否存在查詢的結果,如:

if(mysql_num_rows($query)) { 
    // exist 
} else { 
    // does not exist 
}