<?php
class DB extends MySQLi {
public $queries = array();
# Указатель на объект
static private $_instance = null;
/*
Специальный метод для класса-одиночки.
Инициализация
*/
public static function _init() {
if (self::$_instance === null) self::$_instance = new self();
return self::$_instance;
}
/*
Специальный метод для класса-одиночки
Передача объекта
*/
public static function getInstance() {
return self::$_instance;
}
/*
Переопределенный конструктор
*/
public function __construct() {
# Инициализация
@parent::__construct(Config::DB_HOST, Config::DB_USER, Config::DB_PASS, Config::DB_BASE);
# Если подключение невозможно
if ($this -> connect_errno) {
Logger::write('Connect Fail! Error: ' . $this -> connect_error);
die('Ошибка подключения к базе данных. Зайдите чуть позже.');
}
# Устанавливаем кодировку
$this -> set_charset(Config::DB_CHAR);
}
/*
Переопределенный метод
Отправка запроса
*/
public function query($query) {
@$result = parent::query($query);
# Проверяем запрос на ошибки
if(!$result) {
Logger::write('Error query(' . $query . '). Message: ' . $this -> error);
die('
Произошла ошибка #DBQ.<br/>
Возможно, на данной странице проводятся технические работы.<br/>
Если проблема не прекратится в течение 20-ти минут,
то сообщите, пожалуйста, об этом администратору.
');
}
$this -> queries[] = $query;
return $result;
}
/*
Переопределенный метод.
Подготовленное выражение
*/
public function prepare($query) {
@$result = parent::prepare($query);
# Проверяем запрос на ошибки
if(!$result) {
Logger::write('Error prepare query(' . $query . '). Message: ' . $this -> error);
die('
Произошла ошибка #DBPQ<br/>
Возможно, на данной странице проводятся технические работы.<br/>
Если проблема не прекратится в течение 20-ти минут,
то сообщите, пожалуйста, об этом администратору.
');
}
$this -> queries[] = $query;
return $result;
}
/*
Передача информации о статусе БД
Массивы на выходе:
$info['uptime'] - время работы сервера БД в секундах
$info['queries'] - кол-во запросов за всё время работы сервера
$info['connects'] - кол-во соединений к БД за всё время работы
$info['qps'] - кол-во запросов в секунду. так можно узнать загруженность сервера
*/
public function getInfo() {
# Сюда будем записывать информацию
$info = array();
# Узнаем нужную информацию
$tmpr = $this -> query("
SHOW GLOBAL STATUS WHERE `Variable_name` IN('Uptime', 'Queries', 'Connections')
");
while($row = $tmpr -> fetch_assoc()) {
if($row['Variable_name'] == 'Uptime') $info['uptime'] = $row['Value'];
if($row['Variable_name'] == 'Queries') $info['queries'] = $row['Value'];
if($row['Variable_name'] == 'Connections') $info['connects'] = $row['Value'];
}
# Вычисляем кол-во запросов в секунду
$info['qps'] = round(($info['queries'] / $info['uptime']), 3);
return $info;
}
}
?>