@Radoncheg

Как правильно написать php класс для работы с mysqli?

Добрый день! Я пишу классы для работы с mysqli чтобы каждый раз ее не вызывать. Функция connect которая соединяется с базой данных получилась, а вот как оформить функцию select которая выбирает и возвращает id нужного имени пользователя и пароля через класс Database? То же самое планирую сделать с функцией create. Я дважды получается обращаюсь к классу Database.php Что не так в синтаксисе? Браузер выдает ошибку

Warning: mysqli_query() expects parameter 1 to be mysqli, null given in E:\openserver\OSPanel\domains\notebook.ru\classes\Database.php on line 8

Warning: mysqli_fetch_array() expects parameter 1 to be mysqli_result, null given in E:\openserver\OSPanel\domains\notebook.ru\classes\Database.php on line 9

Введенные данные не верны
Класс Database:
<?php
class Database {
    public function connect() {
        return mysqli_connect("localhost", "root", "", "notebook");
    }

    public function select() {
       $user = mysqli_query($sql, "SELECT `id` FROM `users` WHERE `username` = '$username' AND `password` = '$password'");
       return mysqli_fetch_array($user);
    }
}


Класс User:
<?php
require_once("Database.php");
class User {

function find($username, $password) {
$database = new Database();
$sql = $database->connect();
$database->select();
}

function create($username, $password, $email) {
$database = new Database();
$sql = $database->connect();    
mysqli_query($sql, "INSERT INTO users(username, password, email) VALUES ('$username', '$password', '$email')");
}

}
  • Вопрос задан
  • 1100 просмотров
Решения вопроса 1
@AUser0
Чем больше знаю, тем лучше понимаю, как мало знаю.
Конкретно в вашем коде первая ошибка из-за того, что переменная $sql (открытое соединение с MySQL) не попадает внутрь функции select(). Или передавайте в качестве аргумента (что неудобно из-за лишнего кода), или храните эту переменную внутри класса Database{}.

Вторая ошибка вытекает из первой, поскольку mysqli_query() не отрабатывает корректно, не возвращает результат, необходимый в mysqli_fetch_array().
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
mad_maximus
@mad_maximus
Все очень плохо. Изучайте PDO.
Ответ написан
Kasperenysh
@Kasperenysh
Рецидив в особо острой форме))
class Database {

  private $host = "localhost";
  private $adm = "root";
  private $pass = "";
  private $db;
  private $sql;
  public $user;
  
  function __construct($db) {
  $this->db = $db;
  $this->connect($this->db);
}

public function connect($db) {
$this->sql = mysqli_connect($this->host, $this->adm, $this->pass, $db);
}

public function select($username, $password) {
$this->user = mysqli_query($this->sql, "SELECT `id` FROM `users` WHERE `username` = '$username' AND `password` = '$password'");
return mysqli_fetch_array($this->user);
}
}

Я сам только начал изучать ООП может и криво(надеюсь знающие ребята в коментах поправят, мне это будет полезно), но примерно так это должно работать...
И работа с классом отличается...
$db = "netbook";
$user = $_POST['user'];
$pass = $_POST['password'];

$bd_user = new Database ($db);
$val_uset = $bd_user -> select($user, $pass);
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы