Оптимизация классов для работы с БД (PHP CLI, PDO)
Есть два класса для работы с БД.
Дано: есть скрипт, который работает в CLI 24/7 (бот), иногда (а точнее, часто) нужно подключаться к БД для выполнения различных запросов.
Проблема: MySQL Server Gone (превышен таймаут ожидания)
Решение: решил разбить один класс БД на два:
- Класс для подключения к БД
- Класс со стандартными 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;
}
}