0

正如我在旧帖子中所描述的,我正在将我的“小型”项目MYSQLMYSQLi. 我已经成功升级了整个项目,我认为一切正常,直到我创建了新用户。问题是我可以使用我想要的用户名,它会说如果数据不正确,但当数据正确并登录时成功无论我使用什么用户名,它总是以用户名登录我ID = 1

这是我的代码:

登录:

function login($username, $password) {
    $id = user_id_from_username($username);
    $username = sanitize($username);
    $password = md5($password);

    global $db_connect;

    $result = $db_connect->query("SELECT COUNT(id) FROM `members` WHERE `username` = '$username' AND `password` = '$password'");
    if (false === $result) {
        return false;
    }
    return ($result->num_rows == 1) ? $id : false;
}

来自 USERNAME 的用户 ID:

function user_id_from_username($username) {
    $username = sanitize($username);
    global $db_connect;

    $result = $db_connect->query("SELECT(id) FROM members WHERE username = '$username'");
    if (false === $result) {
        return false;
    }
    return ($result->num_rows == 1) ? true : false;
}

任何帮助都会得到帮助,我尝试了很多东西,并且正在比较我所有MYSQLiMYSQL文件,但我仍然找不到任何问题。

4

2 回答 2

1
return ($result->num_rows == 1) ? $id : false;

将始终返回 true,因为您正在计算行数SELECT COUNT(id),因此您将始终得到一个结果

第二件事,在 user_id_from_username 中:

 return ($result->num_rows == 1) ? true : false;

您返回 TRUE 而不是 user_id。更改它,以便您返回用户 ID,而不是 true。

true == 1,这就是为什么你总是以 userid 1 结束。

于 2013-01-28T21:03:53.437 回答
0

您的函数函数 user_id_from_username($username) 将始终返回 true 或 false。您将获得用户 ID 1,因为该函数返回 true = 1。

在您将其重写为 MYSQLi 之前,该函数是什么样的?

于 2013-01-28T21:06:06.740 回答