Connect.php
См. документацию.
1 <?php
2 
3 /**
4  * @file
5  * @brief подключение к БД
6  *
7  */
8 
9 namespace Wrong\Database;
10 
11 use Wrong\Start\Env;
12 
13 /**
14  * @brief Connect создает подключение к базе данных
15  *
16  */
17 
18 final class Connect
19 {
20  private static $instance = null;
21 
22  /**
23  * создает новый объект PDO и сохраняет его в свойстве $dbh
24  *
25  * @param ignore_error Если установлено значение true, сценарий будет продолжать выполняться даже в
26  * случае сбоя подключения к базе данных.
27  *
28  * @return object PDO Обработчик базы данных.
29  */
30  private function __construct($ignore_error = false)
31  {
32  $dsn = 'mysql:dbname=' . Env::$e->DB_DATABASE . ';host=' . Env::$e->DB_HOST . ';port=' . Env::$e->DB_PORT . ';charset=utf8mb4';
33  try {
34  $this->dbh = new \PDO($dsn, Env::$e->DB_USERNAME, Env::$e->DB_PASSWORD, [\PDO::ATTR_DEFAULT_FETCH_MODE => \PDO::FETCH_OBJ]);
35  } catch (\PDOException $e) {
36  if (!$ignore_error) {
37  exit($e->getMessage());
38  }
39  }
40  }
41 
42  /**
43  * Получает экземпляр подключения к базе данных
44  *
45  * @param bool $ignore_error Если установлено значение true, сценарий будет продолжать выполняться даже в
46  * случае сбоя подключения к базе данных.
47  *
48  * @return object Connect
49  */
50  public static function getInstance($ignore_error = false)
51  {
52  if (self::$instance === null) {
53  self::$instance = new self($ignore_error);
54  } else {
55  try {
56  // Попытаемся выполнить произвольный запрос, чтобы проверить подключение
57  self::$instance->dbh->query('SELECT 1');
58  } catch (\PDOException $e) {
59  // Если произошла ошибка, значит соединение утрачено и его нужно восстановить
60  self::$instance = new self($ignore_error);
61  }
62  }
63 
64  return self::$instance;
65  }
66 
67  /**
68  * Закрывает соединение с базой данных
69  */
70  public function close()
71  {
72  $this->dbh = null;
73  self::$instance = null;
74  }
75 
76  /**
77  * Запрещает клонирование экземпляра
78  */
79  public function __clone()
80  {
81  throw new \RuntimeException('Clone is not allowed');
82  }
83 
84  /**
85  * Запрещает десериализацию экземпляра
86  */
87  public function __wakeup()
88  {
89  throw new \RuntimeException('Deserialization is not allowed');
90  }
91 }
Connect создает подключение к базе данных
Definition: Connect.php:19
static getInstance($ignore_error=false)
Definition: Connect.php:50
__construct($ignore_error=false)
Definition: Connect.php:30
Env класс управляющий, добавляющий или записывающий переменные среды
Definition: Env.php:17
static $e
Definition: Env.php:22
if(($dbh=Connect::getInstance(true) ->dbh) && $dbh->query("SHOW TABLES") ->fetchAll() && $dbh->query("SELECT COUNT(*) FROM `users`") ->fetchColumn()) if(!empty($_POST)) exit
Definition: install.php:198