Оптимизация классов для работы с БД (PHP CLI, PDO)

Есть два класса для работы с БД.

Дано: есть скрипт, который работает в CLI 24/7 (бот), иногда (а точнее, часто) нужно подключаться к БД для выполнения различных запросов.

Проблема: MySQL Server Gone (превышен таймаут ожидания)

Решение: решил разбить один класс БД на два:

  1. Класс для подключения к БД
  2. Класс со стандартными CRUD-методами (оставил один укороченный метод для примера)

Идея в том, что при каждом отдельном запросе идёт новое подключение, а при - оно закрывается.

Вопрос: Прошу оценить данный подход, правильный ли он в данном случае? Как можно улучшить / оптимизировать код? В общем, нужен совет опытных разработчиков.

Класс #1

<?php

class dbInit
{
    protected $PDO;

    public function __construct()
    {
        if($this->PDO == null){
            $this->Connect();
            echo "Connected".PHP_EOL;
        }
    }

    protected function Connect(){

        $dbHost = $this->Pass(2);
        $dbName = $this->Pass(5);
        $dbUser = $this->Pass(3);
        $dbPass = $this->Pass(4);

        $dsn = "mysql:host={$dbHost};port=3306;dbname={$dbName};charset=utf8";

        $options = [
            PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
            PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC
        ];

        try {
            $this->PDO = new PDO($dsn, $dbUser, $dbPass, $options);
        } catch (PDOException $e) {
            die($e->getMessage());
        }
    }

    public function Disconnect(){
        $this->PDO = null;
    }

    public function getPDO(){
        if(!$this->PDO){
            $this->Connect();
        }
        return $this->PDO;
    }

    public function Pass($option){
        $read = file_get_contents('pass.txt');
        $passArr = explode(PHP_EOL, $read);
        return $passArr[$option];
    }

}

Класс #2

class dbMethods
{
    public static $pdo;

    public static function dbInit(){
        if(self::$pdo == null){
            self::$pdo = new dbInit();
        }
    }

    public function SelectData($all, $fields, $table){

        $sql = "SELECT {$fields} FROM {$table}";

        self::dbInit();
        $stmt = self::$pdo->getPDO()->prepare($sql);

        //{...}

        self::$pdo->Disconnect();
        return $array;

    }
    
}

Ответы (0 шт):