intoxicated
@intoxicated

Не работает база данных в class'ах (выдает ошибку при выводе массива) PHP, что не так?

Решил я создать систему базы данных в class'ах , вроде все отлично шло , но после вывод массива по функции выдает ошибку , не могу понять в чем проблема.

class DataBase {
  const DB_HOST = 'localhost';
  const DB_USER = 'root';
  const DB_PASS = 'root';
  const DB_NAME = 'example_class_db';
  public $con = null;
  protected $mysqli;

  public function connect() {
    $this->con = true;
    try {
      $this->mysqli = new mysqli(DB_HOST, DB_USER, DB_PASS, DB_NAME);
      $this->mysqli->query("SET NAMES 'utf8'");
    } catch (mysqli_sql_exception $e) {
        throw new Exception($e->getMessage());
    }

  }
  public function getRow($query, $params = []) {
    try {
      $stmt = $this->mysqli->prepare($query);
      $stmt->execute($params);
      return $stmt->fetch();
    } catch (mysqli_sql_exception $e) {
        throw new Exception($e->getMessage());
    }
  }
}

$db = new Database();
$getRow = $db->getRow("SELECT * FROM users WHERE id = ?", ["1"]);   //  Ошибку выдает на этой строке , без неё все работает отлично


Заранее спасибо за ответы , извиняюсь за убогое оформление в первый раз на данном форуме )
  • Вопрос задан
  • 87 просмотров
Пригласить эксперта
Ответы на вопрос 1
@FanatPHP
Чебуратор тега PHP
подход в принципе ничего, но реализация - тихий ужас.
вот так будет хотя бы немного похоже на "класс" плюс исправление очевидных ошибок и бессмысленностей.
<?php
class DataBase
{
    const DB_HOST = 'localhost';
    const DB_USER = 'root';
    const DB_PASS = 'root';
    const DB_NAME = 'example_class_db';
    const DB_CHARSET = 'utf8mb4';
    public $mysqli;

    public function __construct()
    {
        try
        {
            mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
            $this->mysqli = new mysqli(self::DB_HOST, self::DB_USER, self::DB_PASS, self::DB_NAME);
            $this->set_charset(self::DB_CHARSET);
        }
        catch(mysqli_sql_exception $e)
        {
            throw new Exception($e->getMessage());
        }

    }
    public function preparedQuery($query)
    {
        $stmt = $this->mysqli->prepare($query);
        $stmt->bind_param(str_repeat("s", count($params)) , ...$params);
        $stmt->execute();
        return $stmt;
    }
    public function getResult($query, $params = [])
    {
        if (!$params)
        {
            return $this->mysqli->query($query);
        }
        return $this->preparedQuery($query, $params)->get_result();
    }

    public function getRow($query, $params = [])
    {
        return $this->getResult($query, $params)->fetch_assoc();
    }
}
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы
RecruitIT Москва
от 100 000 до 160 000 ₽
Сбер Москва
До 240 000 ₽
от 130 000 до 180 000 ₽
24 окт. 2020, в 20:52
27000 руб./за проект
24 окт. 2020, в 20:39
2000 руб./за проект
24 окт. 2020, в 20:39
2000 руб./за проект