Я немного запутался, PHP говорит, что $ results является не объектом класса mysqli

Я пытаюсь получить результаты с помощью mysqli-> fetch_row () (или fetch_object (), fetch_array ()), но когда я иду запускать код во время выполнения, он вызывает следующую ошибку:

Неустранимая ошибка: вызовите функцию-член fetch_row () для не-объекта в … в строке 23.

Вопрос var, который делает это, равен $, приводит к приведенному ниже коду. $ user и $ password получают значения из другого .php-файла, в который этот файл включен, поэтому на данный момент это не очень важно. Теперь исправьте меня, если я ошибаюсь, но если $ results задано = $ db-> query ($ query), то разве он не должен наследовать свойства $ db aka класса 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"); } } 

}

Solutions Collecting From Web of "Я немного запутался, PHP говорит, что $ results является не объектом класса mysqli"

Ваш запрос не работает в этой строке:

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

Из-за этого $results является false не результатом, как вы ожидаете.

Чтобы устранить проблему, вам нужно добавить кавычки вокруг своих переменных (или использовать подготовленные заявления):

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

Я бы предложил обновить, чтобы использовать подготовленный оператор для предотвращения проблем с 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(); 

В сценарии отсутствует проверка ошибок, и поэтому ошибка в запросе не обрабатывается.

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

Если вы используете текст поля пользователя и пароля или varchar, то вам нужно использовать одиночную кавычку вокруг них

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

Вы должны проверить, если запрос выполняется правильно:

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

Используйте: var_dump ($ results), чтобы проверить, что он содержит

Почему вы проверяете, if($results) после попытки манипулировать им?

Эта…

 $results->close(); //... if(!$results){ //... } конкретные $results->close(); //... if(!$results){ //... } 

Должно быть…

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