密码返回为NULL ...?

时间:2014-09-30 16:13:59

标签: php mysqli

我有一个名为getUser的方法,如果参数中提供的用户名存在,它只从数据库中提取记录。这是方法:

public function getUser($username)
    {
        $userInfo = array(
        'username' => $username
        );

        if ( ! $stmt = $this->Connection()->prepare("SELECT * FROM " . $this->_info['Prefix'] . "users
        WHERE `".implode("`, `", array_keys($userInfo))."` = ?"))
        {
            echo 'Prepare Failed: ' . $stmt->error . '<br />';
            return FALSE;
        }

        if ( ! $stmt->bind_param('s', $userInfo['username']))
        {
            echo 'Bind Failed: ' . $stmt->error . '<br />';
            return FALSE;
        }

        if ( ! $stmt->execute())
        {
            echo 'Execute Failed: ' . $stmt->error . '<br />';
            return FALSE;
        }

        $stmt->store_result();

            if ($stmt->num_rows == 0)
            {
                $this->_user['exists'] = FALSE;
            }
            else
            {
                $this->_user['exists'] = TRUE;
            }

        $stmt->bind_result($username, $password);
        $stmt->fetch();

        $this->_user['username'] = $username;
        $this->_user['password'] = $password;


            $stmt->close();
            return $this->_user;
    }

正如您在方法结束时所看到的,我返回_user数组,我在另一个名为checkPassword的方法中使用该数组。这就是出错的地方,我的意思是密码是NULL。为了确保这不是查询错误,我输出了用户名(从getUser方法返回)并且它是正确的。所以我知道查询正在执行并存储值,但密码是以NULL的形式返回的。这是checkPassword方法:

public function checkPassword($username, $password)
    {
       $info = $this->getUser($username);

       if ($info['exists'] == FALSE) {
           exit('The specified user does not exist!');
       }

        if (password_verify($password, $info['password']))
        {
            echo 'YAY';
        }
        else
        {
            echo 'NAY';
        }

    }

正如您可能猜到的那样,即使密码正确,我得到的输出也是NAY。当我查看$info['password']的值时,它只是NULL

为什么密码被返回为NULL

1 个答案:

答案 0 :(得分:0)

您应该从以下位置更改查询:

"SELECT * FROM "

"SELECT username, password FROM "

现在,如果您的用户表中有更多列,则可以在$password函数

中为$usernamegetUser()变量指定其他字段