警告:mysql_result()期望参数1是资源,给定对象?

时间:2017-08-03 22:02:40

标签: php mysql

我已经看到了关于如何修复此错误的多个答案,但我不确定如何将其应用于我的代码:

   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;
}

1 个答案:

答案 0 :(得分:0)

您正在尝试混合mysqlmysqli 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()函数。