正如我在旧帖子中所描述的那样,我正在将我的“小”项目从MYSQL
升级为MYSQLi
。我已成功升级整个项目,我认为一切正常,直到我创建新用户..问题是我可以使用我想要的用户名,它会说数据不正确但数据是否正确并登录successl no mater我使用的用户名总是使用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;
}
任何帮助都会得到满足,我尝试了很多东西,然后将我的所有MYSQLi
与MYSQL
文件进行比较,但我仍然找不到任何问题。
答案 0 :(得分: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结束。
答案 1 :(得分:0)
您的函数函数user_id_from_username($ username)将始终返回true或false。您将获得用户ID 1,因为该函数返回true = 1。
在将其重写为MYSQLi之前,该功能是什么样的?