Mysqli описание запросов к базе данных в классе? Хочу обработку запроса к базе данных описать в методе класса.function verifyUser($name) {
$query = "SELECT psw, user_group FROM users WHERE name = ?";
$stmt = $mysqli->stmt_init();
if ($stmt = $mysqli->prepare($query)) {
/* связываем параметры с метками */
$stmt->bind_param("s", $name);
/* запускаем запрос */
$stmt->execute();
/* связываем переменные с результатами запроса */
$stmt->bind_result($psw, $user_group);
/* получаем значения */
$stmt->fetch();
printf("login - %s, password - %s, user_group - %s", $name, $psw, $user_group);
/* закрываем запрос */
$stmt->close();
}
}
}
$name = $_POST["name"];
$auth = new Auth($name);
$auth->verifyUser($name);
$mysqli - объект класса mysqli. Соединение с базой выполнено.
Итог: Fatal error: Call to a member function stmt_init() on a non-object
Указывает на строку $stmt = $mysqli->stmt_init();.
Если использовать код вне класса, то все работает. Я понял, что $stmt должен быть объектом. Как его объявить в классе я не знаю и устал уже искать примеры.

21 Авг 2019 в 07:08
211 +1
0
Ответы
1

Для использования объекта mysqli внутри класса, его необходимо передать в конструктор класса. Например:

class Auth {
private $mysqli;
public function __construct($mysqli) {
$this->mysqli = $mysqli;
}
public function verifyUser($name) {
$query = "SELECT psw, user_group FROM users WHERE name = ?";
$stmt = $this->mysqli->stmt_init();
if ($stmt = $this->mysqli->prepare($query)) {
/* связываем параметры с метками */
$stmt->bind_param("s", $name);
/* запускаем запрос */
$stmt->execute();
/* связываем переменные с результатами запроса */
$stmt->bind_result($psw, $user_group);
/* получаем значения */
$stmt->fetch();
printf("login - %s, password - %s, user_group - %s", $name, $psw, $user_group);
/* закрываем запрос */
$stmt->close();
}
}
}
$name = $_POST["name"];
$mysqli = new mysqli("localhost", "username", "password", "database");
$auth = new Auth($mysqli);
$auth->verifyUser($name);

Теперь объект mysqli передается в конструктор класса Auth и может быть использован в методе verifyUser.

20 Апр 2024 в 13:06
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Гарантированные бесплатные доработки в течение 1 года
Быстрое выполнение от 2 часов
Проверка работы на плагиат
Поможем написать учебную работу
Прямой эфир