Задать вопрос
marperia
@marperia
Дизайнер, программист, писатель

Почему у нуба возникает ошибка «Call to a member function fetch_array() on a non-object» в MySQL?

Вот отрывок из кода, отвечающий за БД:
// Подключаемся к БД
	$mysqli = new mysqli("mysql.hostinger.ru /*Хост*/", "u201540426_user /*Username*/", "*********** /*Пароль*/", "u201540426_users /*БД*/");
// проверка соединения
	if ($mysqli->connect_errno) {
		printf("Не удалось подключиться: %s\n", $mysqli->connect_error);
		exit();
	}
//Проверяем, есть ли пользователь в БД
	$result = $mysqli->query("SELECT id FROM users WHERE login='$login'");
	$myrow = $mysql->fetch_array($result);
	if (!empty($myrow['id'])) {
//Если есть, то логинимся
	}
// если такого нет, то создаём его
	$result2 = mysqli_query("INSERT INTO users (login,check) VALUES ('$login','$check')");
// Проверяем, есть ли ошибки
	if ($result2=='TRUE') {
		SetCookie('login',$login,0x6FFFFFFF);
		header('Location: index.php');;
	} else {
		echo "MySQL error. Try again.";
	}
// очищаем результирующий набор
    $result->close();

Первая ошибка в строчке:
$myrow = $mysql->fetch_array($result);
Выдаёт: Fatal error: Call to a member function fetch_array() on a non-object in /home/u201540426/public_html/reg.php on line 24
Почему — не знаю, но и MySQL я пока только учу. Возможно, есть и другие ошибки, но чтобы до них добраться, нужно решить эту, что не в моих силах. Да, я практически не разбираюсь в query и mysqli, но я учусь.
Благодарю вас, о Всезнающие боги PHP!
  • Вопрос задан
  • 11212 просмотров
Подписаться Оценить 1 комментарий
Решения вопроса 1
valerium
@valerium
Изобретая велосипед
Вы пытаетесь вызвать метод у сущности, которая не является объектом.

Если коротко, то в строке с ошибкой нужно $mysql-> заменить на $result-> и убрать $result из скобок.

Если подробнее, то строка
$result = $mysqli->query("SELECT id FROM users WHERE login='$login'");

в переменной $result создала объект результирующего набора. У этого объекта есть метод fetch_array(), который при каждом вызове возвращает одну строку из набора. Вы же попытались вызвать этот метод у переменной, которая не объявляется в приведённом участке кода, но явно содержит что-то, не являющееся результирующим набором.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@profispb
Программист.
В теле запроса неправильно указана переменная!
$result = $mysqli->query('SELECT id FROM users WHERE login='.$login.'); -должно быть так. Будет работать.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы