Подключение к базе данных — важная часть любого веб-приложения. В 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