Небольшое введение
Однажды мне пришлось писать веб сайт, который стоял на хостинге, к которому провайдер не давал ни одной СУБД. Выход один — использовать обычные файлы (fwrite, fgets и.т.д.). Тогда я решил написать свою СУБД в виде PHP скрипта для создания и управления (поиска, выборки и сортировки) файловых реляционных БД. Проект получил гордое название VirSQL, хотя SQL он, конечно, не поддерживает и имеет некоторые недостатки, но тем не менее используется сейчас во всех моих проектах. Загрузить можно тут.
Ниже текст справки, написанный мною специально для Habrahabr.
Общие сведения
Описание продукта
VirSQL – это система управления реляционными базами данных, полностью написанная на PHP 5.4. Главным отличием VirSQL от других СУБД является способ сохранения данных. Все данные
хранятся в обычных текстовых файлах. Это обеспечивает максимальную скорость работы и кроссплатформенность.
Как уже отмечалось выше, система написана полностью на PHP, следовательно, она не требует установки и подходит практически к любому хостингу. Достаточно лишь отправить файл
«VirSQL.php» на сервер, подключить его к нужному PHP скрипту директивой «include()» (или аналогичной) и использовать функции управления базой данных.
Формат данных
VirSQL хранит данные в виде текстовых файлов с расширением «.vir». Каждая база данных состоит из одной или нескольких таблиц, для хранения каждой из которых выделяется
отдельный текстовый файл. Строки этих таблиц называются записями, а столбцы полями. У каждого поля есть свое уникальное внутри таблицы имя (идентификатор) состоящий из латинских
букв, цифр и знаков подчеркивания. Порядок следования полей жестко фиксирован. Количество, названия и порядок полей не могут быть изменены после создания таблицы. Число записей
может варьироваться, как и порядок их следования. В таблице могут отсутствовать записи, но должно быть хотя бы одно поле.
Работа с базой данной
Для работы с базой данных используется только одна функция «VirSQL()», которая принимает лишь один параметр – строку, содержащую команду базы данных. Функция возвращает
результат выполнения команды. Команда имеет следующий формат:
name par1 par2 par3…
Здесь name – название команды, а par1, par2, par3 и.т.д. параметры.
Число параметров варьируется в зависимости от используемой команды.
Создание таблицы
Работа с базой данных так или иначе начинается с создания таблицы. Для этого предназначена команда «ntable».
Синтаксис
ntable file field1 field2 field3…
Здесь file – имя файла создаваемой таблицы. Следует указать полное имя (с относительным или абсолютным путем и расширением). В качестве расширения рекомендуется использовать «*.vir».
field1, field2, field3 и.т.д. – названия (идентификаторы) полей создаваемой таблицы.
Команда возвращает «true» при успешном создании таблицы и «false» при возникновении ошибки.
Пример 1
ntable database/my_database.vir name surname email
Будет создана таблица «my_database.vir» в папке «database» с 3 полями: «name», «surname» и «email».
Пример 2
ntable 1.vir 1
Будет создана таблица «1.vir» с одним полем – «1».
Удаление таблицы
Для удаления таблицы достаточно просто удалить соответствующий ей файл. Однако, так же существует команда для удаления таблиц.
Синтаксис
dtable filename
Здесь filename — это полное имя файла для удаления (включая абсолютный или относительный путь).
Команда ничего не возвращает
Пример
dtable database/to_delete.vir
Команда удалит файл «to_delete.vir» из папки «database»
Выборка данных
Для работы с данными требуется их извлечь из таблицы. Для извлечения нескольких записей таблицы, удовлетворяющих некоторому условию служит команда select.
Синтаксис
select database fields filter sort
Здесь database — полное имя (с абсолютным или относительным путем), fields — перечень полей для выборки (через запятую), filter — перечень условий (через запятую), которым должны удовлетворять выбираемые записи, sort — принцип сортировки выбираемых записей
Команда возвращает двухуровневый массив, первый уровень которого (индексный) содержит все записи, выбранные из таблицы, а второй (ассоциативный) поля этих записей.
Примечание: если требуется включить в выборку абсолютно все поля, в качестве значения параметра fields требуется указать «all».
Условия выборки
Параметр filter содержит условия которым должны удовлетворять выбираемые записи. Каждое условие может быть одного из двух типов: точное или диапазон. Точное условие имеет следующий синтаксис:
field|value
Здесь field — поле, для которого применяется условие, а value — значение, которое должно иметь это поле у записи, чтобы эта запись была включена в выборку.
Условие-диапазон имеет иной синтаксис:
field|min|max
Здесь field — поле, к которому применяется условие, а min и max — минимальное и максимальное значение этого поля соответственно, при которых эта запись включается в выборку.
Примечание: поле, для которого указывается правило обязательно должно быть указано в параметре fields.
Если требуется включить абсолютно все записи таблицы в выборку, в качестве значения параметра filter следует указать «no».
Сортировка
По умолчанию записи в выборке идут в порядке их следования в таблице, который может варьироваться при изменении содержимого таблицы. Для выстраивания данных в каком-то определенном порядке используется параметр sort.
Параметр имеет следующий синтаксис:
field|type
Здесь field — поле, по значению которого будет выполняться сортировка, а type — тип сортировки («up» — по возрастанию, «down» — по убыванию).
Если сортировка не требуется следует указать «no», и тогда записи в выборке будут следовать в порядке по умолчанию. Если требуется сохранить порядок по умолчанию, но развернуть его (первая запись станет последней, последняя – первой, вторая – предпоследней, предпоследняя – второй и.т.д.), следует указать «reverse». Если же требуется выстроить записи в случайном порядке, следует указать «rand».
Примечание: поле, сортировку по которому Вы производите должно быть обязательно включено в параметр fields.
Пример 1
select db/1.vir all no no
Команда выбирает из таблицы «1.vir», хранящейся в папке «db» все записи и все поля и выстраивает их в порядке по умолчанию.
Пример 2
select 2.vir name,email,age age|25|30 name|up
Команда выбирает из таблицы «2.vir» поля «name», «email» и «age» записей, в которых значение поля «age» укладывается в диапазон от 25 до 30 и сортирует выборку в порядке возрастания значения поля «name».
Пример 3
select 3.vir name,age,sex age|35|50, sex|male rand
Команда выбирает из таблицы «3.vir» поля «name», «age» и «sex» записей, в которых значение поля «sex» — «male», а значение поля «age» в диапазоне от 35 до 50 и сортирует выборку в случайном порядке.
Удаление записи
Удаление одной записи таблицы осуществляется при помощи команды delete.
Синтаксис
delete filename field value
Команда ищет в таблице, полное имя которой — filename запись, у которой значение поля field равно value и удаляет ее. Если таких записей несколько, удаляется первая в таблице.
Пример
delete db.vir nickname Virous
Будет удалена запись в таблице «db.vir», у которой поле «nickname» равно «Virous». Если таких несколько – будет удалена первая.
Добавление записи
Добавление записей в таблицу осуществляется с помощью команды add.
Синтаксис
add filename field1 field2 field3…
Команда добавляет в таблицу, полное имя которой — filename запись, у которой значение первого поля — field1, второго — field2 и.т.д.
Пример
add db.vir Virous 1985 +79037299613 virous@mail.ru
В таблицу «db.vir» будет добавлена запись, первое поле которой равно – «Virous», второго – «1985», третьего – «+79037299613», четвертого – «virous@mail.ru».
Количество записей
Найти количество записей, удовлетворяющих тому или иному условию (условиям) можно с помощью команды add.
Синтаксис
count filename filter
Команда возвращает количество записей таблицы, полное имя которой — filename, удовлетворяющих условию filter.
Условия
Параметр filter содержит условия которым должны удовлетворять выбираемые записи. Каждое условие может быть одного из двух типов: точное или диапазон. Точное условие имеет следующий синтаксис:
field|value
Здесь field — поле, для которого применяется условие, а value — значение, которое должно иметь это поле у записи, чтобы эта запись была засчитана.
Условие-диапазон имеет иной синтаксис:
field|min|max
Здесь field — поле, к которому применяется условие, а min и max — минимальное и максимальное значение этого поля соответственно, при которых эта запись засчитывается.
Если требуется найти количество всех записей таблицы, в качестве значения параметра filter следует указать «no».
Пример
count db.vir age|25|30,sex|female
Команда находит количество записей таблицы «db.vir», у которых значение поля «sex» — female, а значение поля «age» в диапазоне от 25 до 30.
Максимальное значение
Для нахождения записи с максимальным значением того или иного поля используется команда getmax.
Синтаксис
getmax filename field
Команда находит и возвращает в виде ассоциативного массива запись в таблице, полное имя которой — filename, имеющую наибольшее значение поля field.
Пример
getmax vir.vir age
Команда находит и возвращает в виде ассоциативного массива запись таблицы «vir.vir» с наибольшим значением поля «age»
Редактирование записи
Для изменения записи таблицы служит команда edit.
Синтаксис
edit filename keyfield keyvalue field value
Команда ищет в таблице, полное имя которой — filename запись, у которой значение поля keyfield равно keyvalue и изменяет значение поля field на value.
Пример
edit database.vir nickname Virous email unknown
Команда заменяет значение поля «email» на «unknown» в записи, у которой значение поля «nickname» равно «Virous» в таблице «database.vir».
Получение записи
Получение в виде ассоциативного массива одной записи таблицы осуществляется при помощи команды get.
Синтаксис
get filename field value
Команда ищет в таблице, полное имя которой — filename запись, у которой значение поля field равно value и возвращает ее в виде ассоциативного массива. Если таких записей несколько, возвращается первая в таблице.
Пример
get db.vir nickname Virous
Будет возвращена запись в таблице «db.vir», у которой поле «nickname» равно «Virous». Если таких несколько – будет возвращена первая.
Надеюсь на Ваши отзывы и сведения об ошибках. Спасибо всем прочитавшим…
ссылка на оригинал статьи http://habrahabr.ru/post/165075/
Добавить комментарий