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 должен быть объектом. Как его объявить в классе я не знаю и устал уже искать примеры.
Для использования объекта 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.