继续得到mysqli_free_result()期望参数1是mysqli_result,给定null

时间:2016-07-15 00:41:00

标签: php

使用登录系统,但我一直收到此错误        

//$User = 'kv96';
//$Pass = 'passkv';

//echo isValidLogin($User, $Pass);


function isValidLogin($username, $password) {
    $query = mysqli_query($link,"SELECT * FROM Log_in WHERE Password = '$Pass' AND User_ID ='$User'"); //Finds the database and chooses the row
    //$result = mysqli_query($query);
    $row = mysqli_fetch_array($result); //Fetches the row
    if($row['User_ID'] != null && $row['Password'] != null){return true;}
    else{return false;}

function getUsernameRole($username) {
    return "instructor";
}
mysqli_close($link);
    ?>

有人可以解释为什么这个错误会弹出,我不明白为什么查询失败了?

1 个答案:

答案 0 :(得分:0)

我注意到你注释掉了$result但你用来获取数据库数组。您应该使用$query,或者在//之前删除2 $result

不仅如此,您忘记通过函数的参数解析$link。因此查询将不会成功。

另一个问题是,您在查询中使用了$pass$user变量,但是,您还没有通过函数的参数传递它们。您必须将$username更改为$user,依此类推..

我还将你的while循环改为行数。这将使您免于使用不必要的代码,并且更加实用;保存你做一个while循环并检查值是否返回null。

function isValidLogin($link, $user, $pass) { // parsing through the connection link and $user, $pass variables
    $query = mysqli_query($link,"SELECT * FROM Log_in WHERE Password = '$Pass' AND User_ID ='$User'"); //Finds the database and chooses the row
    $count = mysqli_num_rows($query);
    if($count > 0){
        return true;
    } else {
        return false;
    }
}

我想提出的建议(强烈建议)是使用预准备语句来防止SQL注入,但是,你可以找到很多关于如何做的帖子。