0

我是 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 ;
   } 

使用 this 总是会导致失败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 语句来检查查询?如果有更好的方法来编写这个函数,请提出建议。:)

4

1 回答 1

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错误。

于 2013-03-25T13:59:35.027 回答