2011-11-13 98 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 
}