Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- <?php
- class Database {
- private $query; //текст исходного SQL-запроса
- private $trueQuery; //текст SQL-запроса после преобразования
- private $params; //массив подставляемых параметров
- public $paramSymbol = '?'; //символ, который будет заменяться подставляемыми параметрами
- private $result; //результирующая выборка
- private $linkID; //ID соединения с БД
- private $host; //адрес сервера
- private $user; //имя пользователя
- private $pass; //пароль
- private $db; //имя БД
- public $numRows; //количество записей в выборке
- public $affectedRows; //количество затронутых записей
- public $rowData; //данные одной записи из выборки
- //Конструктор класса
- public function __construct($hostname,$username,$password,$dbname) {
- $this->host = $hostname;
- $this->user = $username;
- $this->pass = $password;
- $this->db = $dbname;
- }
- //открытие соединения с СУБД
- public function Connect() {
- $this->linkID = mysql_connect($this->host,$this->user,$this->pass) or die('Ошибка подключения к СУБД');
- if(!$this->linkID) return false;
- if(!(mysql_selectdb($this->db, $this->linkID) or die('Ошибка выбора базы'))) {
- return false;
- }
- mysql_query("SET NAMES 'utf8'");
- return $this->linkID;
- }
- //закрытие соединения с СУБД
- public function Close() {
- if (!empty($this->linkID)) {
- mysql_close($this->linkID) or die('Ошибка при закрытии соединения с СУБД');
- return true;
- } else {
- return false;
- }
- }
- //Задает шаблон для SQL-запроса
- public function Prepare($s) {
- $this->params = array();
- $this->query = $s;
- }
- //Заменяет следующий знак $paramSymbol в шаблоне запроса на прослешенную строку данных
- public function Bind($s) {
- $this->params[] = $s;
- }
- // Функция экранирования переменных
- public function QuoteSmart($value) {
- // если magic_quotes_gpc включена - используем stripslashes
- if (get_magic_quotes_gpc()) {
- $value = stripslashes($value);
- }
- // Если переменная - число, то экранировать её не нужно
- // если нет - то окружем её кавычками, и экранируем
- if (!is_numeric($value)) {
- $value = mysql_real_escape_string($value);
- }
- return $value;
- }
- //Возвращает SQL-запрос с учетом Bind
- public function GetSQL() {
- $aq = explode($this->paramSymbol, $this->query);
- if(count($aq) != (count($this->params)+1)) {
- die("Не совпадает шаблон Prepare() и количество вызовов Bind()");
- }
- $q = '';
- for($i = 0; $i < count($aq)-1; $i++) {
- $q .= $aq[$i] . $this->QuoteSmart($this->params[$i]);
- }
- $q .= $aq[$i];
- $this->trueQuery = $q;
- return $q;
- }
- //Выполняет SQL-запрос
- public function Query($s) {
- $r = mysql_query($s) or die("Ошибка запроса");
- if (!$r){
- return null;
- }
- $this->result = $r;
- if (preg_match("/^SELECT/", $s)) {
- $this->numRows = mysql_num_rows($this->result);
- } else {
- $this->numRows = 0;
- }
- $this->affectedRows = mysql_affected_rows($this->linkID);
- return $this->result;
- }
- //Получает запись из выборки
- public function FetchArray() {
- if(!$this->result) return false;
- $this->rowData = mysql_fetch_array($this->result);
- return $this->rowData;
- }
- //Освобождает результат запроса
- public function Free() {
- mysql_free_result($this->result);
- }
- }
- ?>
Add Comment
Please, Sign In to add comment