我已经看到了关于如何修复此错误的多个答案,但我不确定如何将其应用于我的代码:
function user_exists($username) {
$username = sanitize($username);
global $con;
return (mysql_result( mysqli_query($con, "SELECT COUNT(`user_id`) FROM `users` WHERE `username` ='$username' "), 0) == 1) ? true : false;
}
根据这里的答案,我认为它与mysql_result
有关:mysql_result() expects parameter 1 to be resource, object given。我如何才能使用我的代码?
编辑:
function login($username, $password){
$user_id = user_id_from_username($username);
global $con;
$username = sanitize($username);
$password = md5($password);
return (mysqli_num_rows(mysqli_query($con, "SELECT COUNT(`user_id`) FROM `users` WHERE `username`='$username' AND `password`='$password'"))==1) ? $user_id : false;
}
答案 0 :(得分:0)
您正在尝试混合mysql
和mysqli
API,这些API无效。 mysqli
中没有任何内容直接等同于mysql_result()
。
正确使用mysqli
,包括使用预备声明(因此无需消毒)。
function user_exists($username) {
global $con;
$stmt = mysqli_prepare($con, "SELECT COUNT(*) FROM users WHERE username = ?");
mysqli_stmt_bind_param($stmt, "s", $username);
mysqli_stmt_execute($stmt);
mysqli_stmt_bind_result($stmt, $count);
mysqli_stmt_fetch($stmt);
return $count == 1;
}
如果您真的想使用mysqli_num_rows
,请不要在查询中使用COUNT()
,因为它总是返回包含匹配数的单行。
return mysqli_num_rows(mysqli_query($con, "SELECT 1 FROM `users` WHERE `username`='$username' AND `password`='$password'")) == 1;
但这是一种糟糕的方式,因为你没有使用准备好的声明。
您也不应该使用MD5
进行密码哈希,使用PHP的password_hash()
函数。