Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/255.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我有点困惑,PHP说$results是mysqli类的非对象_Php_Mysql_Mysqli - Fatal编程技术网

我有点困惑,PHP说$results是mysqli类的非对象

我有点困惑,PHP说$results是mysqli类的非对象,php,mysql,mysqli,Php,Mysql,Mysqli,我试图使用mysqli->fetch\u row或fetch\u object、fetch\u array获取结果,但当我在运行时运行代码时,会出现以下错误: 致命错误:在第23行对…中的非对象调用成员函数fetch_行 在下面的代码中,有问题的var是$results$user和$password从包含该文件的另一个.php文件中获取它们的值,因此目前这并不重要。如果我错了,请纠正我,但是如果$results设置为$db->query$query,那么它不应该继承$db的属性,也就是mysql

我试图使用mysqli->fetch\u row或fetch\u object、fetch\u array获取结果,但当我在运行时运行代码时,会出现以下错误:

致命错误:在第23行对…中的非对象调用成员函数fetch_行

在下面的代码中,有问题的var是$results$user和$password从包含该文件的另一个.php文件中获取它们的值,因此目前这并不重要。如果我错了,请纠正我,但是如果$results设置为$db->query$query,那么它不应该继承$db的属性,也就是mysqli类吗

class mySQLHelper{

    public function checkPass($user, $pass){
        global $db;
        $db =  new mysqli();
        $db->connect('localhost', 'root', '', 'mydb');
        if (mysqli_connect_errno()){
            echo 'Can not connect to database';
            echo mysqli_connect_errno(). mysqli_connect_error();
            exit;
            return false;
        }


        $query = "SELECT user, password FROM Users WHERE user = $user AND password = $pass " ;

       echo $query;

        $results = $db->query($query);

        while ($row = $results->fetch_row()){

            echo htmlspecialchars($row->user);
            echo htmlspecialchars($row->password);


        }

        $results->close();

        $url = 'http://'. $_SERVER['HTTP_HOST'].dirname($_SERVER['PHP_SELF'])."/";
        if(!$results){
         //   mysqli_close($db);
          //  header("Location:.$url.login.php&msg=1");

        }

        else{
        //    mysqli_close($db);
        //    header("Location:.$url.featured.php");


        }

    }

}

如果您使用用户和密码字段文本或varchar,则需要在其周围使用单引号

$query = "SELECT user, password FROM Users WHERE user = '".$user."' AND password = '".$pass."' " ;

您的脚本缺少错误检查,因此无法处理查询中的错误

    $query = "SELECT user, password FROM Users 
    WHERE user = '$user' AND password = '$pass' " ;
    //           ^ quotes needed     

    echo $query;

    $results = $db->query($query);

    // handle a error in the query
    if(!$results)
      die($db->error);

    while ($row = $results->fetch_row()){
        echo htmlspecialchars($row->user);
        echo htmlspecialchars($row->password);
    }

您的查询在此行失败:

$results = $db->query($query);
因此,$results为false-不是您期望的结果对象

要解决此问题,您需要在变量周围添加引号或使用准备好的语句:

$query = "SELECT user, password FROM Users WHERE user = '".$user."' AND password = '".$pass."' " ;
不过,我建议更新以使用a来防止SQL注入问题:

$stmt = $db->prepare('SELECT user, password FROM Users WHERE user = ? AND password = ?');
$stmt->bind_param('ss', $user, $pass);
$stmt->execute();
$results = $stmt->get_result();
为什么要在尝试操作$后检查其结果

这个

$results->close();
//...
if(!$results){
    //...
}
应该是

if(!$results){
    //...
}
$results->close();

您必须检查查询是否正常运行:

if ($result = $mysqli->query($query))
{
}

使用:var_dump$results检查它包含的内容

您需要在SQL语句中引用您的变量。或者,因为您使用的是mysqli,所以可以将它们作为绑定参数添加进来—这更安全。我认为这是用于insert语句的。$results可能是错误的,因为查询中有错误。我在查询设计器中运行了查询,当输入正确时,它会返回匹配项。所以我知道查询本身是正确的。显然不是因为您没有引用参数。我正在调试,我试图找出它为什么会将我重定向到登录页面。这是留在那里的代码,因为我要像你提到的那样重新安排它。嘿,我只是想感谢你的帖子。我使用了你的方法,虽然我不得不修改一些东西,比如$stmt->bind_param'ss',$user,$pass,但是你发布的方式抛出了一个错误,我将结果绑定到两个新变量,我最终得到了我想要的结果。再次感谢你。@否认是真棒,很高兴我能帮上忙!我已经更新了我的答案,以使用您指定的更新,以便将来的任何参考人也可以选择它-感谢您的注释^_^