SQLite – это реляционная база данных, запросы к которой
можно осуществлять при помощи языка запросов SQL. База данных не
поддерживает все особенности SQL и уступает в функциональности другим
развитым СУБД, но вполне подходит для хранения и извлечения
информации.
Отличие SQLite от MySQL и аналогичных СУБД
Классические СУБД, такие как MySQL (а так же MS SQL,
Oracle, PostgreeSQL) состоят из отдельного сервера, поддерживающего работу
базы данных и прослушивающих определённый порт, на предмет обращения
клиентов. В качестве клиента может выступать в том числе и расширение PHP,
реализующего интерфейс, с помощью которого осуществляются запросы к базе.
Движок SQLite и интерфейс к ней реализованы в одной библиотеке, что
увеличивает скорость выполнения запросов. Такой сервер часто называют встроенным.
Замечание
Встроенный сервер имеется и у других баз данных,
например, у MySQL, но его использование требует лицензионных отчислений,
поэтому не получило широкое распространение в мире открытых исходных
кодов.
SQLite является бестиповой базой данных. Точнее, есть
только два типа – целочисленный "integer" и текстовый "text". Причём
"integer" используется преимущественно для первичного ключа таблицы, а для
остальных данных пойдёт "text". Длина строки, записываемой в текстовое
поле, может быть любой.
Особенности SQLite
Все базы данных хранятся в файлах, по одному файлу на
базу. Количество баз данных, а так же таблиц в них, ограниченно только
свободным местом, имеющимся на сайте. А максимально возможный объём одной
базы данных составляет 2 Тб.
Так как все данные хранятся в файлах, проблем с переносом
базы данных с одного хостинга на другой не существует – достаточно лишь
скопировать соответствующие файлы.
Установка SQLite
В PHP5 поддержка SQLite установлена и включена по
умолчанию.
Установка под Windows: Для установки SQLite
необходимо скачать и скопировать в папку с расширениями библиотеку
"php_sqlite.dll", которую можно загрузить по ссылке: http://snaps.php.net/win32/PECL_STABLE/php_sqlite.dll.
Затем необходимо раскомментировать (или добавить) строку
"extension=php_sqlite.dll" в файле "php.ini". Для нормального
функционирования SQLite также необходимо раскомментировать строку
"extension=php_pdo.dll".
Замечание
Если используется полная версия PHP в zip-архиве, а не в
виде инсталлятора, соответствующие библиотеки расширения должны находится
в директории расширений PECL.
Замечание
Библиотека "php_pdo.dll" должна загружаться до загрузки
"php_sqlite.dll". То есть в php.ini строка "extension=php_sqlite.dll"
должна стоять после "extension=php_pdo.dll".
Установка под Unix: Скачайте свежую версию SQLite
с официального сайта (http://sqlite.org/download.html).
Прочтите файл "INSTALL", поставляемый с исходными тестами модуля. Или
просто воспользуйтесь командой установки PEAR: "pear install
sqlite".
Работа с SQLite
Создание базы данных: Для того чтобы создать новую
базу данных необходимо воспользоваться функцией sqlite_open(). Если базы,
имя которой указано в параметре "filename" не существует, то функция
создаст новую базу данных с именем "filename" и вернёт идентификатор базы
данных.
Для работы с SQLite, как и любой реляционной базой данных
используется язык запросов SQL. Поэтому создать таблицу данных можно при
помощи традиционного запроса CREATE TABLE, вставить запись при помощи
оператора INSERT, извлечь запись при помощи SELECT, а обновить
существующую запись при помощи запроса UPDATE.
В приведённом ниже примере создаётся таблица table1,
содержащая три поля: целочисленное поле id, которое выступает в качестве
первичного ключа, и два текстовых поля field1 и field2.
<?php
// Создадим новую базу данных
$db = sqlite_open("my_database.db");
if (!$db) exit("Невозможно создать базу данных!");
// Создадим
таблицу "table1" в базе
$query_table = sqlite_query($db, "CREATE TABLE table1
(id
INTEGER PRIMARY KEY,
/*
id автоматически станет автоинкрементным */
field1
TEXT,
field2
TEXT);
");
if (!$query_table) exit("Невозможно создать таблицу в базе данных!");
// Запишем
что-нибудь в таблицу
$query_insert = sqlite_query($db, "INSERT INTO table1(field1, field2) VALUES ('PHP5',
'Apache');");
if (!$query_insert) exit("Невозможно записать данные в таблицу!");
?>
После создания таблицы, в неё добавляется запись,
содержащая строки 'PHP5' и 'Apache', поле id автоматически получает
значение 1.
Вывод данных из базы: Для вывода данных из таблиц
используется всё та же функция – sqlite_query(). Если выбирается несколько
записей, результат выборки следует обработать при помощи цикла while() и
функции sqlite_fetch_array(), которая имеет следующий синтаксис:
array sqlite_fetch_array (
resource result [, int result_type [, bool decode_binary]] )
Ниже приводится скрипт, демонстрирующий вывод нескольких
записей из базы данных:
<?php
// Создадим новую базу данных
$db = sqlite_open("my_database.db");
if (!$db) exit("Невозможно создать базу данных!");
// Создадим
таблицу "table1" в базе
$query_table = sqlite_query($db, "CREATE TABLE table1
(id
INTEGER PRIMARY KEY,
/*
id автоматически станет автоинкрементным */
field1
TEXT,
field2
TEXT);
");
if (!$query_table) exit("Невозможно создать таблицу в базе данных!");
// Запишем
что-нибудь в таблицу
sqlite_query($db, "INSERT INTO table1(field1, field2) VALUES ('PHP5+',
'Apache');");
sqlite_query($db, "INSERT INTO table1(field1, field2) VALUES ('SQLite – ',
'классная вещь');");
sqlite_query($db, "INSERT INTO table1(field1, field2) VALUES
('Посетите ', 'sqlite.org');");
// Сделаем выборку данных
$res = sqlite_query($db, "SELECT * FROM table1;");
// В цикле
выведем все полученные данные
while ($array = sqlite_fetch_array($res))
{
echo($array['field1'].$array['field2']." (id записи:".$array['id'].")<br />");
}
?>
В результате работы скрипта получим:
PHP5+Apache (id записи:1)
SQLite – классная вещь (id записи:2)
посетите sqlite.org (id
записи:3)
Редактрирование записи: Для изменения поля
воспользуемся функцией sqlite_query() и передадим ей запрос на обновление
(UPDATE).
<?php
// Создадим новую базу данных
$db = sqlite_open("my_database.db");
if (!$db) exit("Невозможно создать базу данных!");
// Создадим
таблицу "table1" в базе
$query_table = sqlite_query($db, "CREATE TABLE table1
(id
INTEGER PRIMARY KEY,
/*
id автоматически станет автоинкрементным */
field1
TEXT,
field2
TEXT);
");
if (!$query_table) exit("Невозможно создать таблицу в базе данных!");
// Запишем
что-нибудь в таблицу
sqlite_query($db, "INSERT INTO table1(field1, field2) VALUES ('PHP5+',
'Apache');");
sqlite_query($db, "INSERT INTO table1(field1, field2) VALUES ('SQLite – ',
'классная вещь');");
sqlite_query($db, "INSERT INTO table1(field1, field2) VALUES
('Посетите ', 'sqlite.org');");
// Изменим поле с id=1
sqlite_query($db, "UPDATE table1 SET field2='Apache+Linux' WHERE
id=1;");
// Сделаем выборку данных
$query = sqlite_query($db, "SELECT * FROM table1;");
// В цикле выведем все
полученные данные
while
($array = sqlite_fetch_array($query))
{
echo($array['field1'].$array['field2']." (id записи:".$array['id'].")<br />");
}
?>
В результате получим:
PHP5+Apache+Linux (id записи:1)
SQLite – классная вещь (id записи:2)
посетите sqlite.org (id
записи:3)
Удаление записи из таблицы: Чтобы удалить запись
из таблицы, нужно передать функции sqlite_query() запрос на удаление
(DELETE).
<?php
// Создадим новую базу данных
$db = sqlite_open("my_database.db");
if (!$db) exit("Невозможно создать базу данных!");
// Создадим
таблицу "table1" в базе
$query_table = sqlite_query($db, "CREATE TABLE table1
(id
INTEGER PRIMARY KEY,
/*
id автоматически станет автоинкрементным */
field1
TEXT,
field2
TEXT);
");
if (!$query_table) exit("Невозможно создать таблицу в базе данных!");
// Запишем
что-нибудь в таблицу
sqlite_query($db, "INSERT INTO table1(field1, field2) VALUES ('PHP5+',
'Apache');");
sqlite_query($db, "INSERT INTO table1(field1, field2) VALUES ('SQLite – ',
'классная вещь');");
sqlite_query($db, "INSERT INTO table1(field1, field2) VALUES
('Посетите ', 'sqlite.org');");
// Удалим поле с id=2
sqlite_query($db, "DELETE FROM table1 WHERE id=2;");
// Сделаем
выборку данных
$query = sqlite_query($db, "SELECT * FROM table1;");
// В цикле выведем все
полученные данные
while
($array = sqlite_fetch_array($query))
{
echo($array['field1'].$array['field2']." (id записи:".$array['id'].")<br />");
}
?>
В результате получим:
PHP5+Apache (id записи:1)
посетите sqlite.org (id записи:3)
Закрытие базы данных: Для закрытия базы данных
используется функция sqlite_close(). В качестве единственного параметра
функция принимает идентификатор открытой базы данных.
void sqlite_close ( resource
dbhandle )
Схема использования данной функции представлена
ниже
<?php
$db = sqlite_open("my_database.db");
/*
... Здесь
происходит работа с БД ...
*/
sqlite_close($db);
?>
Замечание
Закрывать базу данных данной функцией – необязательно.
Все открытые базы данных автоматически закроются при завершении работы
скрипта.