php class DB extends MySQLi public queries array Указатель на объект s

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
<?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;
}
}
?>