Php MySQL查询行为怪异

Php MySQL查询行为怪异,php,mysql,Php,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) {

我有:

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\u result
行获取一个错误,即使它不应该被执行(当用户名不存在时,即$result的计算结果为false)。

您可以
var\u dump($result)
查看值,如果它是一个资源(根据),那么您的查询是成功的,如果没有返回false。这是一个布尔值false,但如果确实返回了false,则仍应遵守您的==。

您可以
var\u dump($result)
查看该值,如果它是一个资源(根据),则查询成功,如果未返回false。这是一个布尔值false,但是如果确实返回了false,那么您的==仍然应该得到尊重。

只有在出现错误时才会返回
false
。在本例中没有错误,只有0行

mysql_query($query);
您需要使用获取返回的行数。

只有在出现错误时才会返回
false
。在本例中没有错误,只有0行

mysql_query($query);
您需要使用获取返回的行数

mysql_query($query);
返回查询的结果集。它不会返回
true
false。

您可以使用
mysql\u num\u rows()
检查查询结果是否存在,例如:

if(mysql_num_rows($query)) {
   // exist
} else {
   // does not exist
}
返回查询的结果集。它不会返回
true
false。

您可以使用
mysql\u num\u rows()
检查查询结果是否存在,例如:

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

我使用
var\u dump
进行检查,它确实是一种资源。然而,我知道在我的数据库中没有匹配的用户名
登录用户id
。这怎么可能?要调试,您需要
var\u dump($\u POST['login-userid'])
并确保值是您期望的值。奇怪的是,当您使用$u POST var
login userid
查询数据库的
name
列时,您会将其命名为$u POST var
。我使用
var\u dump
进行检查,它确实是一个资源。然而,我知道在我的数据库中没有匹配的用户名
登录用户id
。这怎么可能?要调试,您需要
var\u dump($\u POST['login-userid'])
并确保值是您期望的值。奇怪的是,当您使用$\u POST var
login userid
查询数据库的
name
列时,您会将其命名为$\u POST var。