我在php脚本中遇到问题,当我输入正确的用户名时,它回显“用户找到”和
时我输入错误的用户名,它也回显“用户找到”。
这是我的代码请检查并让我知道,如果!$结果变量应该工作,但没有。为什么呢?
<?php
echo "enter the username \n";
$username = trim(fgets(STDIN));
echo "enter the password\n";
$password = trim(fgets(STDIN));
//connecting to database
$db = mysql_connect("localhost","sqldata","sqldata") or die(mysql_error());
//selecting our database
$db_select = mysql_select_db("accounts", $db) or die(mysql_error());
$result= mysql_query("select * from login where username = '$username' ");
if (!$result)
{
echo "error no user";
}
else
{
echo "user found";
}
mysql_close($db)
?>
答案 0 :(得分:0)
mysql_query
返回结果资源,除非MySQL查询中存在实际错误。这个结果绝对没有表明其中是否有任何行。
试试这个:
$result = mysql_fetch_assoc(mysql_query("select * from `login` where `username`='".mysql_real_escape_string($username)."'"));
if( !$result) echo "Error no user";
else echo "user found";
答案 1 :(得分:0)
避免使用mysql_*
函数,因为它们已被弃用并将被删除。
要回答您的问题,原因是如果查询成功执行,mysql_query
会返回结果对象。
您需要使用mysql_num_rows()
来检查是否找到了用户。
$result = mysql_query("select * from login where username = '$username' ");
if(mysql_num_rows($result) == 0) {
echo "error no user";
} else {
echo "user found";
}
此外,您应该始终检查查询是否没有像这样失败:
if (!$result) {
echo "Query failed! Reason: " . mysql_error();
exit;
}
答案 2 :(得分:0)
只要查询实际执行(即没有MySQL或查询错误)if(!result)
将始终验证为true
,即使找到0条记录。这是因为$result
是MySQL结果集资源,而不是查询的直接值。
您需要检查返回的行数:
$result= mysql_query("select * from login where username = '$username' ");
if(!$result) {
echo "MySQL error: " . mysql_error();
} else if (mysql_num_rows($result) === 0) {
echo "User not found";
} else {
echo "user found";
}
我还强烈建议您不要使用不再使用的mysql_*
函数。也许请查看mysqli
或PDO
。
答案 3 :(得分:0)
即使没有匹配的行,你也会得到一个结果对象。您需要查看结果返回的行数;看看http://us1.php.net/manual/en/function.mysql-query.php。
另外,我强烈建议您只要学习如何进行查询,请使用mysqli而不是mysql。它在各方面都更好。