正如我在旧帖子中所描述的,我正在将我的"小"项目从MYSQL
升级到MYSQLi
。我已经成功地升级了整个项目,我认为一切正常,直到我创建新用户。问题是我可以使用我想要的用户名,它会说数据是否正确,但是当数据正确且登录成功时,无论我使用什么用户名,它总是以用户名登录我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;
}
用户名中的用户 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
文件进行比较,但我仍然找不到任何问题。
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,所以这就是为什么你总是以用户ID 1结束。
你的函数函数 user_id_from_username($username) 将始终返回 true 或 false。您获得的用户 ID 为 1,因为该函数返回 true = 1。
在你把它重写给MYSQLi之前,这个函数是什么样的?