致命错误:在非对象上调用成员函数query()

Wei*_*inz 2 php mysqli

我有这个错误:

致命错误:在第8行的/Applications/XAMPP/xamppfiles/htdocs/login.php中调用非对象的成员函数query()

这条线是这样的:

$res = $mysqli->query("SELECT * FROM user WHERE user='$user' and password='$pw'");
Run Code Online (Sandbox Code Playgroud)

这是login.php:

$user = $_POST['user'];
$pass = $_POST['pass'];
$pw = md5($pass); 
include_once('connect.php');

function check_login($user,$pw,&$result){
    $res = $mysqli->query("SELECT * FROM user WHERE user='$user' and password='$pw'");
    $cont = 0;
    while($row = $res->fetch_object()){
        $cont++;
        $result = $row;
    }
    if($cont == 1){
        return 1;
    }
    else{
        return 0;
    }
}

if(!isset($_SESSION['userid'])){
  if(isset($_POST['login'])){
    if(check_login($user,$pw,$result) == 1){
        session_start();
        $_SESSION['userid'] = $result->id_user;
        header("location:index.php?var=ok");
    }
    else{
        header('location:index.php?var=log');
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

和connect.php的代码:

$mysqli = new mysqli('localhost', 'root', 'pass', 'cms' );
if ($mysqli->connect_error) {
   die('Error de Conexión (' . $mysqli->connect_errno . ') '
        . $mysqli->connect_error);
 }
Run Code Online (Sandbox Code Playgroud)

可能是什么问题呢?连接数据库的问题?

hel*_*ert 7

这很可能是一个范围问题.这意味着$mysqli您在包含文件中定义的变量超出了check_login函数的范围(即在此函数中未知).

您可以尝试$mysqli从全局范围获取变量

function check_login($user,$pw,&$result){
    global $mysqli;
    $res = $mysqli->query("SELECT * FROM user WHERE user='$user' and password='$pw'");
    // ...
Run Code Online (Sandbox Code Playgroud)

编辑:哦,你还应该注意代码中的SQL注入漏洞.使用预处理语句来防止这个问题(或者至少使用类似函数来逃避输入变量mysqli::real_escape_string).