Задать вопрос
@krysanoveo
Сисадмин, джун-прогер

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 должен быть объектом. Как его объявить в классе я не знаю и устал уже искать примеры.
  • Вопрос задан
  • 2408 просмотров
Подписаться 2 Оценить Комментировать
Решения вопроса 1
FanatPHP
@FanatPHP
Чебуратор тега РНР
$name = $_POST["name"];
$db = new mysqi();
$auth = new Auth($db); 
$auth->verifyUser($name);

В конструкторе пишешь $this->db = $db;
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
А причём тут $stmt? Ошибка говорит о том, что метод stmt_init() вызывается не для объекта, то есть $mysqli - не объект.
Ответ написан
Комментировать
Reey
@Reey
Ошибка говорит, что $mysqli не является объектом.
function verifyUser($name) {
    $query = "SELECT psw, user_group FROM users WHERE name = ?";

    require_once path_to_mysqli_class //на случай если файл не в автолоудинге и еще не заинклюжен
    $mysqli = new Mysqli();
    $stmt = $mysqli->stmt_init();
    ...
Ответ написан
Ваш ответ на вопрос

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

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