Библиотека SQLite

May 4, 2010 by admin Комментировать »

Одним из важных нововведений в РНР 5 по сравнению с его предыдущими вер­сиями является включенная поддержка SQLite — встраиваемой библиотеки для работы с базами данных, которая реализует большое количество возможностей стандарта SQL 92. С тех пор как в РНР появилась данная библиотека, для неболь­ших проектов перестала быть необходимостью установка каких-либо сторонних СУБД. С этих пор в РНР есть своя встроенная система управления базами данных.

Расширение SQLite основано на работе с обычными файлами, поэтому за права­ми доступа следит файловая система сервера, что снимает с SQLite вопросы по кон­тролю доступа к данным. Система SQLite также не требует для себя работы какого-либо демона или клиента, как это необходимо, например, в MySQL, что, конечно же, высвобождает некоторую ‘facTb ресурсов системы.

С SQLite, как и с MySQLi, можно работать в двух стилях — процедурном и объектном. В расширении SQLite существует несколько предопределенных объектов:

• SQLiteDatabase — класс для обшего доступа к SQLite;

• SQLiteResult — класс ДЛЯ работы с результатами выборок данных из базы;

• SQLiteUnbuf f ered — класс для работы с небуфферизированными результа­тами выборок из базы.

Здесь будут рассмотрены способы работы с SQLite в объектно-ориентированном стиле. Полный перечень методов и функций для работы с SQLite доступен в офици­альной документации (www.php.net/manual/ru/ref.sqlite.php).

Этот метод-конструктор предназначен для создания экземпляра объекта. Фор­мат записи метода следующий.

_construct ( string filename [, int mode [, string &error_message]] )

Метод идентичен по свойствам функции sqlite_open (), т.е. в его задачи вхо­дит открытие базы данных для начала операций с ней. Важно учитывать, что поль­зователь, от имени которого работает Web-сервер, должен иметь права на запись не только в сам файл базы данных, но и в директорию, в которой этот файл хранится. Перед началом работы необходимо создать пустой (обыкновенный текстовый) файл filename, если он еще не существует. Рассмотрим пример.

$db = new SQLiteDatabaseC’db/mydb.sqlite");

Файл базы данных (в нашем примере это db/mydb. sqlite) может иметь любое расширение или не иметь его вовсе.

Метод SQLiteDatabaser.queryExec ()

Этот метод выполняет SQL-запрос, не требующий возврата выборки. Формат за­писи метода следующий.

bool gueryExec ( string query )

В результате выполняется SQL-запрос query. Рассмотрим пример. <?php

$db = new SQLiteDatabase("db/mydb.sqlite"); $db->queryExec("BEGIN;

CREATE TABLE friends (friend_id INTEGER PRIMARY KEY friend_name CHAR(255));

INSERT INTO friends (friend_name) VALUES(‘John•);

INSERT INTO friends (friend_name) VALUES С Fred•) •

INSERT INTO friends (friend_name) VALUES(‘Alex’);

COMMIT;");

?>

Данный код откроет базу db/mydb. sqlite и в рамках одной транзакции создаст таблицу friends и вставит в нее три записи.

Транзакция — это группа SQL-запросов, которые либо все вместе выполняются, либо в случае ошибки все отменяются. Оператор SQL BEGIN начинает транзакцию, а оператор COMMIT ее фиксирует в базе данных. Если какое-либо из условий, необ­ходимых программисту, было бы нарушено, то вместо COMMIT необходимо было бы использовать ROLLBACK для отката транзакции. Это означает, что пока SQLite не встретит в SQL-запросе команду COMMIT (если ей предшествовала BEGIN), никакие изменения в силу не вступят.

Метод SQLiteDatabase: :query () выполняет запрос к базе данных, в котором предусматривается возврат некоторой выборки. Формат записи метода следующий.

SQLiteResult query ( string query )

В качестве результата будет возвращен объект типа SQLiteResult Рассмотрим пример.

<?php

$вЬ = new SQLiteDatabase("db/mydb.sqlite"); $result = $db->query("SELECT * FROM friends");

while ($result->valid()) {

$row = $result->current()• echo $row[l] . "<br>"; $result->next();

}

unset($db) ; ?>

После выполнения $db->query() был создан новый объект $result. Назначе­ния остальных методов, приведенных в примере, рассмотрены далее.

Методы класса SQLiteResult

Все методы SQLiteResult предназначены для работы с результатами выборки метода query (). Результат выборки — это набор записей (строк), по которому мо­жет происходить перемещение. Пример использования методов уже был приведен выше. Рассмотрим их назначение.

В приведенном примере метод $result->valid() сообщал программе, остались ли еще в выборке записи. Если записи есть, то возвращается значение TRUE, в об­ратном случае — FALSE. С помощью метода $result->current () был создан мас­сив $row, содержащий текущую запись. Таким образом, обратившись к элементу $row[l], мы получали доступ к полю friend_name текущей записи. Напомним, что нумерация элементов начинается с нуля. Для того чтобы перейти к следующей записи в наборе, был использован метод $result->next ().

Также для перемещения по выборке данных из базы можно использовать методы:

• rewind () — для перемещения к первой записи;

• see]c(int rownum) — для перемещения к конкретной записи под номером ? rownum.

Для получения значения ключа текущего элемента можно использовать метод key О, а метод column () вернет значение того или иного поля (колонки) из теку­щей записи. Пример.

<?php

$db = new SQLiteDatabase("db/mydb.sqlite");

$result = $db->c[uery("SELECT * FROM friends");

while ($result->valid()) {

echo $result->colimn("friend_name") . "<br>"; $result->next();

)

unset($db); ?>

Данный код выведет на экран все имена f riend_name из таблицы friends.

Метод SQLiteDatabaser.array Query ()

Еще одним простым способом получить выборку данных из базы, да еще прямо в РНР-массив, можно с помощью метода arrayQuery (). Краткий формат записи метода следующий.

array arrayQuery ( string query [, int result_type] )

Используется данный метод класса SQLiteDatabase довольно просто.

<?php

$db = new SQLiteDatabase("db/mydb.sqlite"); $friends = $db->arrayQuery("SELECT * FROM friends").

foreach ($friends as $friend) {

echo "(" $friend["friend_id"] . ") " . $ friend["friend_name"] . "<br>"; }

unset($db) ?>

Если BO всех предыдущих методах сначала выполнялся запрос, возвращающий результат, а потом результат конвертировался в массив, то здесь результат запроса сразу переводится в массив.

Метод SQLiteDatabase::lasiInsertRowid()

Этот метод возвращает ID последней вставленной записи. Формат записи метода следующий.

inc lascInsertRowid ( void )

В коде он может быть записан следующим образом.

$db->lastlnsertRowid() ;

Пример использования метода приведен дальше, в описании метода changes ().

Метод возвращает SQLiteDatabase: : changes () количество строк, используе­мых в последнем SQL-запросе. Формат записи метода следующий.

int changes ( void )

Рассмотрим пример использования этого метода. <?php

$db = new SQLiteDatabase("db/mydb.sqlite"); $db->queryExec("BEGIN; insert into friends (friend_name) values (‘Вася’);COMMIT;"); echo "Заоронуто строк: " $db->changes() echo "ID последней вставленной записи: " $db->lastInsertRowid(); unset($db):

В результате выполнения скрипта на экране может появиться примерно сле­дующий текст.

Затронуто строк: 1 * ID последней вставленной записи: 4

Это означает, что была вставлена одна запись, и f riend_ . d у этой записи равня­ется четырем.

Оставить комментарий

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