Теперь Вы понимаете, что для удобной и безопасной работой с базой данных вовсе не требуется библиотека из 100 классов. Всё необходимое имеется, и данный класс без проблем обработает любой запрос.
<?php classDataBase{
privatestatic $db = null; // Единственный экземпляр класса, чтобы не создавать множество подключений private $mysqli; // Идентификатор соединения private $sym_query = "{?}"; // "Символ значения в запросе"
/* Получение экземпляра класса. Если он уже существует, то возвращается, если его не было, то создаётся и возвращается (паттерн Singleton) */ publicstaticfunctiongetDB(){ if (self::$db == null) self::$db = new DataBase(); returnself::$db;
}
/* private-конструктор, подключающийся к базе данных, устанавливающий локаль и кодировку соединения */ privatefunction__construct(){ $this->mysqli = new mysqli("localhost", "root", "", "my_db"); $this->mysqli->query("SET lc_time_names = 'ru_RU'"); $this->mysqli->query("SET NAMES 'utf8'");
}
/* Вспомогательный метод, который заменяет "символ значения в запросе" на конкретное значение, которое проходит через "функции безопасности" */ privatefunctiongetQuery($query, $params){ if ($params) { for ($i = 0; $i < count($params); $i++) {
$pos = strpos($query, $this->sym_query);
$arg = "'".$this->mysqli->real_escape_string($params[$i])."'";
$query = substr_replace($query, $arg, $pos, strlen($this->sym_query));
}
} return $query;
}
/* SELECT-метод, возвращающий таблицу результатов */ publicfunctionselect($query, $params = false){
$result_set = $this->mysqli->query($this->getQuery($query, $params)); if (!$result_set) returnfalse; return$this->resultSetToArray($result_set);
}
/* SELECT-метод, возвращающий одну строку с результатом */ publicfunctionselectRow($query, $params = false){
$result_set = $this->mysqli->query($this->getQuery($query, $params)); if ($result_set->num_rows != 1) returnfalse; elsereturn $result_set->fetch_assoc();
}
/* НЕ-SELECT методы (INSERT, UPDATE, DELETE). Если запрос INSERT, то возвращается id последней вставленной записи */ publicfunctionquery($query, $params = false){
$success = $this->mysqli->query($this->getQuery($query, $params)); if ($success) { if ($this->mysqli->insert_id === 0) returntrue; elsereturn$this->mysqli->insert_id;
} elsereturnfalse;
}
/* При уничтожении объекта закрывается соединение с базой данных */ publicfunction__destruct(){ if ($this->mysqli) $this->mysqli->close();
}
} ?>
PHP-код, который использует данный класс:
<?php
$db = DataBase::getDB(); // Создаём объект базы данных
$query = "SELECT * FROM `users` WHERE `id` > {?} AND `online` = {?}";
$table = $db->select($query, array(10, 1)); // Запрос явно должен вывести таблицу, поэтому вызываем метод select()
$query = "SELECT `login` FROM `users` WHERE `email` = {?}";
$login = $db->selectCell($query, array("test@mail.ru"));// Запрос должен вывести конкретную ячейку, поэтому вызываем метод selectCell() ?>