Задать вопрос

Как правильно делать запросы к БД?

Я создал Class в котором у меня все функции по работе с БД.

Вот так выглядит:
<?php
class Functions {

    private $DB;

    public function __construct()
    {
        include("config.php");
        try {
             $this->DB = new PDO($DSN, $DB_USER, $DB_PASS, $OPTIONS);
        } catch (PDOException $e) {
             // ошибка при подключении
            file_put_contents(__DIR__ . '/logs/error_connect_DB.txt', date('Y-m-d h:i:s') . 'Connect failed error:' . $e->getMessage() . PHP_EOL, FILE_APPEND);
            die();
        }
    }

    public function __destruct()
    {
        $this->DB = null;
    }

    public function GetDetailsByRequestId($requestId)
    {
        // PDO REQUEST
    }
}
$object = new Functions();
?>


Каждый раз, когда необходимо использование БД я подключаю файл:
include_once("function.php");
                $function = new Functions();


И использую функции в этом файле для работы с БД.

Вопрос: Насколько правильно такое использование БД? или такая конструкция ошибочна и несет какие-то последствия?
  • Вопрос задан
  • 436 просмотров
Подписаться 4 Простой Комментировать
Пригласить эксперта
Ответы на вопрос 2
Stalker_RED
@Stalker_RED
вместо file_put_contents лучше error_log() или выброс исключения.

Каждый раз, когда необходимо использование БД я подключаю файл:

до PSR-4 с описанием автозагрузки вы еще не дошли?

В итоге вы придете к тому, что будет базовый класс БД с подключением, логированием, и еще какими-то общими штуками, а от него будут наследоваться классы МОДЕЛИ, и уже в них будет выборка из конкретных таблиц.
Ответ написан
FanatPHP
@FanatPHP
Чебуратор тега РНР
Я создал Class в котором у меня все функции по работе с БД.

Это очень недальновидное решение.
Я понимаю, что на данном этапе ты думаешь что на сайте будет 3 запроса и ты все три можешь положить в один класс.
Но это не так.
Запросов будет много и их надо разделять по областям ответственности, которые называют в разном контексте моделями или доменами

Поэтому у тебя не должно быть никакого класса Functions
Должен быть класс DB, в котором будет два метода - конструктор, в котором создаётся соединение с БД, и метод для выполнения подготовленного запроса. Например такой

Дальше ты делаешь классы-модели для работы с определенными наборами данных. В самом простом варианте - с одной таблицей в БД.
И передаёшь экземпляр класса DB в конструктор.

file_put_contents и die(); - абсолютно бессмысленные телодвижения
если не писать try..catch, то РНР сделает абсолютно то же самое: залогирует ошибку и остановит выполнение скрипта
Ответ написан
Ваш ответ на вопрос

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

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