Mike_Ro
@Mike_Ro
Python, JS, WordPress, SEO, Bots, Adversting

Грамотно-ли написан класс работы с БД?

Всем привет! Написал свой первый класс для работы с MySQL. Хотелось-бы услышать, что на Вашем месте Вы добавили-бы в него. В любом случае, я только учусь и любые замечания лишь пойдут на пользу!
Заранее спасибо!

class DataBase {

    private $connectDataBase;

    // конструкция подключения к БД
    function __construct () {
        $this->connectDataBase = new mysqli(DB_HOST, DB_USERNAME, DB_PASSWORD, DB_DATABASE);
        if ($this->connectDataBase->connect_errno) {
            die('Connect Error (' . $this->connectDataBase->connect_errno . ') ' . $this->connectDataBase->connect_error);
        }
    }

    // метод подготовленного запроса к базе
    function query ($sql) {

        $result = $this->connectDataBase->query($sql);
        return $result;

    }

}
  • Вопрос задан
  • 254 просмотра
Решения вопроса 3
index0h
@index0h
PHP, Golang. https://github.com/index0h
Используйте доктрину DBAL для начала, если будет мало - ORM.

-- Немножко Code Review --
// Используйте PSR-2. Стандарт оформления кода не просто так придуман.
// Кстати, это MySQL БД, или PostgreSQL, или sqlite? Не стоит давать общие имена для конкретных реализаций.
class DataBase {
// Достаточно такого:
// /** @var \PDO */
// private $connection;
    private $connectDataBase;

    // конструкция подключения к БД
    function __construct () {
// Вот никак не могу понять, чего народ так упорно  mysqli любит, ну что там такого прям раз такого, по сравнению с PDO?
// Передавайте готовое подключение в конструктор, а не создавайте его там.
        $this->connectDataBase = new mysqli(DB_HOST, DB_USERNAME, DB_PASSWORD, DB_DATABASE);
        if ($this->connectDataBase->connect_errno) {
// С какого класс по работе с БД управляет процессом и выводом? Если что-то пошло не так - бросайте исключение. Конструкцию die - забудьте.
            die('Connect Error (' . $this->connectDataBase->connect_errno . ') ' . $this->connectDataBase->connect_error);
        }
    }

// Не пишите бесполезных комментариев
    // метод подготовленного запроса к базе
    function query ($sql) {
// Зачем вам переменная $result?
        $result = $this->connectDataBase->query($sql);
        return $result;

    }

}
Ответ написан
@mistergonza
PHP6 evangelist
die('Connect Error (' . $this->connectDataBase->connect_errno . ') ' . $this->connectDataBase->connect_error);

Замените на исключение.

DB_HOST, DB_USERNAME, DB_PASSWORD, DB_DATABASE
Передавайте в конструкторе. А то класс требует константы которые могут быть и не объявлены, и отдельно от приложения в котором они не определены, использовать класс нельзя.

И код приведите к PSR-2.

P.S. Не совсем понятно зачем отдельный класс когда есть PDO.
Ответ написан
Rou1997
@Rou1997
Есть в вашем классе одна проблема - он чрезмерно изобилирует функционалом.
Я бы сделал его гораздо проще:

class DataBase {

    public $connectDataBase;

}


И еще, когда демонстрируете свой класс, не забывайте приводить примеры кода, демонстрирующие его чрезвычайную полезность и многократное ускорение написания кода.
Сейчас я продемонстрирую для моего варианта.

Вот код, написанный без моего класса, итого 22 строчки:

$db
=
new mysqli(
"127.0.0.1",
"root",
"qwerty",
"db");
$db->query("S" +
"E" +
"L" +
"EC" +
T" +
" * FROM"
+ " table1;"
);
;
;
;
;
;
//
//


А вот тот же код с моим классом, всего 1 строчка:

$db = new DataBase(); $db->connectDataBase = new mysqli("127.0.0.1", "root", "qwerty", "db"); $db->connectDataBase->query("SELECT * FROM table1;");


С моим классом - в 22 раза быстрей!
И заметно читабельней!

Всех с Новым Годом, хорошего настроения, здоровья - ну, а я решил не останавливаться на одном классе для работы с БД, и начать разработку своего самописного фреймворка, для которого я напишу целых 2017 классов - в честь Нового года!
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
Driver86
@Driver86
Немодератор toster.ru
Fetch assoc не хватает
Ответ написан
Ваш ответ на вопрос

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

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