我是一个新手到php尝试理解为什么我在我的特定情况下得到布尔错误,其代码适用于其他人。我有一个函数返回$ user_id,稍后将在会话中使用它。这是他的功能:
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语句来检查查询?如果有更好的方法来编写此功能,请建议。:)
答案 0 :(得分:1)
您的查询可能有误,因此mysql_query
返回false
替换:
return (mysql_result(mysql_query("SELECT COUNT (user_id) FROM users WHERE username = '$username' AND password = '$password'"), 0) == 1) ? $user_id : false ;
使用:
$result = mysql_query("SELECT COUNT(user_id) as count FROM users WHERE username = '$username' AND password = '$password'") or die(mysql_error());
return (mysql_result($result, 0, 'count') == 1) ? $user_id : false ;
你会看到mysql错误。