Главная страница статей --> Хитрости при программировании php, заметки по базам данных

Работа с SQLite

Источник: realcoding.net

Введение


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-архиве, а не в виде инсталлятора, соответствующие библиотеки расширения должны находится в директории ext. Подробнее можно почитать в статье Установка Apache, PHP, MySQL.

Замечание

Библиотека 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 и вернёт идентификатор базы данных.

resource sqlite_open ( string filename [, int mode [, string &error_message]] )

В скрипте, преведённом ниже, демонстрируется создание новой базы данных:

<?php
// Создадим базу данных
$db = sqlite_open(my_database.db);
if (!
$db) exit(Не удалось создать базу данных!);
?>

В результате в папке со скриптом у нас появится файл с именем "my_database.db" – наша база данных.

Создание таблиц: Все запросы к базе данных выполняет функция sqlite_query(), которая имеет следующий синтаксис:

resource sqlite_query ( resource dbhandle, string query )

Замечание

Для работы с 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);
?>

Замечание

Закрывать базу данных данной функцией – необязательно. Все открытые базы данных автоматически закроются при завершении работы скрипта.

Ссылки


* http://www.sqlite.org/ – официальный сайт проекта SQLite
* http://php.rinet.ru/ru/sqlite/ – официальная документация по функциям SQLite в PHP
* http://www.softtime.ru/info/sqlite_gbook.php – гостевая книга, основанная на SQLite



Похожие статьи:
- Директор по креативу: менеджер или творец
- Сайт как рекламная площадка
- Счетчики рейтингов - неизбежное зло?
- PHP 6 на подходе
- Все о мета тегах
- Собираем Apache + PHP + XML для Linux.
- Третий тип XSS: Межсайтовый скриптинг через DOM
- Предзагрузка картинок
- Загрузка файлов на FTP
- Некоторые критерии выбора хостинга
- Защита от автоматической регистрации при помощи картинки
- Правила хорошего поведения при обмене ссылками
- Логи в Apache


Оглавление | Обсудить на форуме | Главная страница сайта | Карта сайта |

Контакты
Редакция:
[0.001]