PHP布尔错误

PHP布尔错误,php,mysql,Php,Mysql,我是一个php新手,试图理解为什么在我的特定情况下,我会遇到布尔错误,而代码对其他人有效。我有一个函数,它返回一个$user_id,稍后将在会话中使用。以下是他的职能: function login($username, $password) { $user_id = user_id_from_username($username); $username = sanitize($username); $password = sha1($passw

我是一个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 ;
   } 
这总是会导致失败,错误是:警告:mysql_result()希望参数1是资源,布尔值在中给出。具有指向此行的行号

  return (mysql_result(mysql_query("SELECT COUNT (`user_id`) FROM users WHERE username      = '$username' AND password = '$password'"), 0) == 1) ? $user_id : false ;
为什么会失败?这还不足以检查查询是否成功以及测试结果。DB连接和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语句来检查查询?如果有更好的方法编写此函数,请建议:)

可能您在查询中有错误,因此
mysql\u query
return
false

替换:

return (mysql_result(mysql_query("SELECT COUNT (user_id) FROM users WHERE username = '$username' AND password = '$password'"), 0) == 1) ? $user_id : false ;
与:


您将看到mysql错误。

谢谢Narek,您的代码确实有效,没有错误:)。我理解了这一点,所以我必须将mysql\u查询和mysql\u结果分开,并且对用户id使用“as count”也是必要的。这也可以应用于此代码。这也适用于此代码。函数user\u exists($username){$username=sanitize($username);return(mysql\u结果(mysql\u查询(“从username='$username'的用户中选择计数(用户id)),0)=1)?true:false;}–如果是这样,我尝试将其应用于您的解决方案,但失败了:$result=mysql\u查询(“选择计数(用户名))作为用户名为“$username”或死亡(“无法执行选择查询-”.mysql_error());;的用户的计数;;;返回(mysql_result($result,0,'count')==1)?true:false导致无法执行选择查询-函数lr.COUNT不存在。检查参考手册中的“函数名解析和解析”部分。我又做错什么了?注意:当我按enter键时,我无法设置代码块。请将
COUNT(用户名)
更改为
COUNT(用户名)
(无空格),但最好是
COUNT(*)
,更新:我整夜都在努力处理这段代码,因为即使用户名和密码正确,它也无法匹配密码和用户名。发现在$password中漏掉sha1会完成任务并匹配。为什么密码安全性会导致函数返回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 ;