我尝试了解为什么我在我的具体情况下得到布尔错误的代码适用于其他人的新手。我有一个函数返回$ user_id,稍后将在会话中使用它。这是他的功能:PHP布尔错误
function login($username, $password) {
$user_id = user_id_from_username($username);
$username = sanitize($username);
$password = sha1($password);
return (mysql_result(mysql_query("SELECT COUNT (user_id) FROM users WHERE username = '$username' AND password = '$password'"), 0) == 1) ? $user_id : false ;
}
这总是导致失败,与此error: Warning: mysql_result() expects parameter 1 to be resource, boolean given in
。用一个指向这一行的行号。
return (mysql_result(mysql_query("SELECT COUNT (`user_id`) FROM users WHERE username = '$username' AND password = '$password'"), 0) == 1) ? $user_id : false ;
为什么这会失败?这不足以检查查询成功和测试结果的天气。数据库连接和SQL查询似乎是正确的,无论我使用'或省略。经过几个小时的研究,我设法用if语句去除错误。像这样:
function login($username, $password) {
$user_id = user_id_from_username($username);
$username = sanitize($username);
$password = sha1($password);
$result = mysql_query("SELECT COUNT (user_id) FROM users WHERE username = '$username'AND password = '$password'");
if ($result == 1) {
return $user_id;
} else if ($result == 0) {
return false;
}
}
我想知道为什么第二个函数可以工作,而不是第一个。你是否必须使用if语句来检查查询?如果有更好的方式来写这个函数请建议:)
更新:我整天都在为这个代码苦苦挣扎,因为即使用户名和密码是正确的,它也不会匹配密码和用户名。发现在$密码中留下sha1,完成工作并匹配。为什么密码安全性会导致函数返回错误?奇怪的。 – 2013-03-25 23:15:55