Я@R

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » Я@R » Претечи » Драйвер базы данных.


Драйвер базы данных.

Сообщений 11 страница 14 из 14

1

Для сайтов обычно используется MySQL, так что и мы , но и напишем несколько простых утилит для работы с такой базой. Реально я в течении последних 15 лет использовал эти драйвера в своих проектах с использованием на сайтах баз данных. Этот минимум мне позволял решать большой круг задач, причем вся сложность с выборкой перекладывается на сам SQL-запрос. Так что конструктивы выборки определяются умением создавать SQL-запросы

Самое первое в любом движке, это Драйвер Базы Данных, если конечно движок использует в качестве единицы сохранения информации — базу данных.
Но современные движки, как форумские, так и инетовские без баз практически  сейчас не работают…
В движке Foreach  драйвер занимает особенную роль , так как на нем и построено все общение с базой. Головная структура движка выполнена на трех основных файлах, расположенных в основной библиотеке сервиса.
Это файлы
   connect.php
   record.cls.php
   code/_mysql.inc
Каждый из этих файлов строго отвечают за определенные действия в общей системе управления движком, причем их искусственое разбиение строго на две части, вызвано желанием оптимизировать код.

11

Как это все работает?

В принципе для общения с базой достаточно двух файлов,
это файла настройки и коннекта, но специальный модуль класс record
расширяет возможности управления выборкой из базы данных.

Для того чтоб активировать драйвер в программе достаточно в начале скрипта указать следующее предложение

Код:
include_once("$_libr/record.cls.php");

а в конце, в последней строчке файла обработки не забыть вписать строчку закрытия базы

Код:
db_close();

И все , можно использовать драйвер в полном объеме, как непосредственно в тексте, так и при создании новых классов и функций.

12

На примере покажем как использовать подобный драйвер
для простой цели

Задача: Необходимо иметь статистику посещения сайта за последнии
пять минут. Ну типа те кто в данный момент находятся в OnLine на сервере.

Для этого в базе данных рахмещаем такую таблицу.

Код:
CREATE TABLE `actv` (
  `id_user` int(8),
  `name` varchar(255),
  `tic` int(4),
  `ip` int(4),
  `url` varchar(255)
) ENGINE=Aria;

В этой таблице всего пять полей, причем главные поля, по которым и
строится весь алгоритм; это поле name — имя юзера и tic — время ответки
в стандарте UNIX. Использование UNIX-времени позволяет экономить
на размере поля ибо для хранения глобального времени достаточно всего
целого числа 4-байтной точности. Время сохраняется до секунды. Все остальные поля вспомогательные.
При входе на сайт в режиме гостя юзер однозначно определяется ключевым словом GUEST и значением
IP=адреса, авторизированные же пользователь или ВОТ в поле name — содержит свое локальное имя.
Итак, чтоб занести юзера в таблицу достаточно выполнить SQL-запрос

Код:
$sql = "INSERT INTO actv SET name='Имя',
        tic=unix_timestamp();";

(значение других полей для понимания алгоритна не имеет значения, поэтому не рассматривается)
Далее необходимо ограничить время пребывания юзера в таблице рамками. Для нас оно принимается равное 5 минутам, или в переводе на секунды = 300. Ограничение реаллизуется с помощью двух SQL-запросов, внутри функции с использованием механизма отложенных событий. Для этого вычисляется разница между текущем временем и рамочными 300 секундами, и все записи время которых превышает этот интервал просто удаляются из таблицы.

Код:
function _del_stat() { global $_stat;
  $tim = time() - CRON_TIC;
  $_stat[] = "delete from actv where tic<$tim";
  $_stat[] = "optimize table actv";
}

Эта функция вставляется перед функцией db_close(); которая и исполняет эти запросы.
Первый же запрос, о внесении данных в таблицу осуществляется функцией db_query($sql); в начале исполняемого скрипта в любом месте, но обязательно после объявления класса record , который и осуществляет физическую привязку к базе данных.

Вот в принципе и все. Остается только отобразить эти данные на сайте.

13

.. продолжим...
Не вдаваясь в полное и подробное решение, остановимся на частном решении задачи, а имено отобразим только тех юзеров, которые зарегистрированы в системе, т.е те у которых выполняется условие наличия имени отличного о GUEST и не БОТ-ов. Главным отличительным признаком их это не нулевое значение поля ID_USER. Пишем запрос:

Код:
$sql = "SELECT * FROM actv WHERE id_user>0";

и далее скрипт: — регистрируем класс record

Код:
$rst = new record("actv");
if($rst->get($sql)){
///.........в переменной  $rst->rows;
///- содержится масив необходимой выборки
/// который используем для непосредственного
/// отображения полученыхъ данных
}

На этом первое знакомство с драйвером базы движка можно было бы и закончить, но в таком случае мы ни чего не расскажем о самом интересном свойстве класса record , ради которого здесь и разворачивается все повествование.

14

Можно заметить, что практически всегда при отображениеи значения базы тратится лишнее время для отображения, ибо после выборки и получения массива из базы данных, мы опять сканируем этот массив повторно, чтоб построить необходимое отображение его данных но уже относительно языка отображения HTML., А это не всегда выгодно. Вот поэтому в базовый класс был влючен механизм совмещения выборки с формированием отображени в приемлемой нам форме. Для этого запишем специальную функцию.

Код:
function on_line_view($r){
  return "<span>{$r[1]} </span>";
}

а запрос GET перепищем так

Код:
$rst->get($sql,'on_line_view');

В результате теперь функция выборки совместно с выборкой по запросу будет выполнять необходимую нам обработку заложенную в функции on_line_view, и в результате в массиве выборки будут уже не значения полей и строк, а набор обработаных для отображения элементов, для того чтобы отобразить этот набор на сайте нам необходимо просто выполнить следующие простые операции.

Код:
 echo "OnLine:".implode(",",$rst->rows);

и ….насладиться полученым результатом.
Ценность функции GET класса RECORD состит имено в том, что можно в качестве аргумента после первого , который представляет собой сам SQL-запрос, через запятую, сначала указать отложенную функцию "отображения", а затем, далее, ее аргументы, кроме первого, который представляет собой ссылку на строчку выборки из базы данных. Эта функция, дает возможность совмещать выборку и обработку внутри одного цикла, тем самым экономит само время обработки данных.


Вы здесь » Я@R » Претечи » Драйвер базы данных.