Подключение к базе данных — важная часть любого веб-приложения. В PHP для работы с базами данных используется расширение PDO, которое обеспечивает единый интерфейс для работы с различными базами данных.
Одним из распространенных подходов к работе с подключением к базе данных является использование singleton-паттерна. Этот подход позволяет создать только один экземпляр объекта соединения с базой данных, который может использоваться в различных частях приложения.
Кроме того, важно проверять надежность соединения с базой данных, например, в случае сбоя связи или истечения времени ожидания. Для этого можно использовать проверку соединения с базой данных, например, с помощью выполнения произвольного запроса.
Рассмотрим пример класса для подключения к базе данных с использованием singleton-паттерна и проверкой надежности соединения.
<?php namespace MyApp\Database; use MyApp\Config\Config; use PDO; use PDOException; final class Connection { private static $instance = null; private $dbh; private function __construct() { $config = Config::getInstance(); $dsn = "mysql:host={$config->get('db_host')};port={$config->get('db_port')};dbname={$config->get('db_name')};charset=utf8mb4"; try { $this->dbh = new PDO($dsn, $config->get('db_user'), $config->get('db_pass'), [ PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_OBJ, PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, PDO::ATTR_EMULATE_PREPARES => false, ]); } catch (PDOException $e) { die("Failed to connect to database: " . $e->getMessage()); } } public static function getInstance() { if (self::$instance === null) { self::$instance = new self(); } else { // Check connection reliability by performing a test query try { self::$instance->dbh->query('SELECT 1'); } catch (PDOException $e) { // If an error occurred, the connection is lost and needs to be restored self::$instance = new self(); } } return self::$instance->dbh; } public function __destruct() { $this->dbh = null; } public function __clone() { } public function __wakeup() { } }
В данном примере класс Connection
реализует singleton-паттерн с использованием статического свойства $instance
. Конструктор класса создает объект PDO с параметрами подключения, которые берутся из файла конфигурации.
Метод getInstance()
возвращает статический экземпляр объекта PDO