Авг
26
Опубликовано: 26 Авг 2009
Рубрика: Программирование, Разработка | Автор: inst
Логотип SQLite

Начиная с последней на сегодня версии интерпретатора PHP 5.3.0 в его стандартную поставку был внедрён новый класс под названием SQLite3. Сама библиотека SQLite обладает большим потенциалом в сфере не очень больших web-разработок, так как имеет сравнительно высокую скорость работы. Несомненным плюсом для таких проектов является и то, что фактически вся база хранится в одном файле, рядом со всеми остальными файлами. Это сказывается как на удобстве портируемости, так и на том, что формально функция защиты базы переносится на файловую систему — как минимум придётся запоминать меньше паролей. Учитывая все эти и многие другие плюсы, а также со взглядом на будущее, когда новая версия интерпретатора PHP будет внедрена на большинстве серверов, я решил написать небольшой урок о том, как работать с базой данных третьей версии формата, а заодно и узнать у более опытных, всё ли правильно я усвоил из документации.

Все подобные уроки, что я видел ранее основываются на работе с встроенными функциями sqlite_*, однако сразу скажу, что они уже давно устарели, ибо для работы используют формат SQLite 2.

Итак, как и в случае с любой другой базой данных для начала работы требуется создать соединение. Для этого просто создаём новый экземпляр класса, указав параметр с именем файла:

$db = new SQLite3('example.sqlite');

Всего конструктору можно передать до 3-х параметров. Первым — имя файла с БД, вторым — флаги открытия (только для чтения — SQLITE3_OPEN_READONLY), если использовать значения по умолчанию, то база откроется для чтения и записи, а также в случае отсутствия файла с БД он будет создан, а третьим параметром указывается ключ, который используется для расшифровки файла, если база внутри него хранится в шифрованном виде.

Учитывая, что по сути мы работаем с файлами, закрывать соединение имеет смысл только в случае, если мы собираемся создавать новое, когда в старом больше не нуждаемся, потому что интерпретатор сам закроет все открытые файлы по завершении сценария. Однако, если это требуется, то делать это надо так:

$db->close();

Вся дальнейшая работа с БД должна происходить между этими двумя действиями. Самой важной функцией класса можно считать query(). Работать с ней надо так:

$results = $db->query('SELECT emails FROM users');
while($row = $results->fetchArray())
{
    var_dump($row);
}

Однако в случае, когда запрос явно предполагает, что в ответ база вернёт всего одну строку, либо же Вас интересует лишь первый результат, следует использовать querySingle():

$results = $db->querySingle('SELECT name, email FROM user WHERE id=1');

В приведённом выше примере переменная $results будет содержать лишь значение столбца name. Второй булевый необязательный параметр указывает на то, что результатом будет ассоциативный массив. Для большей ясности приведу ещё один пример этой же функции:

$results = $db->querySingle('SELECT name, email FROM user WHERE id=1', true);
echo 'e-mail пользователя ' . $results['name'] . ' - ' . $results['email'];

В некоторых случаях, результат операции требуется опустить. Это происходит когда Вы выполняете, например, «INSERT», «UPDATE», или «DELETE». В таких случаях нас интересует лишь успешность выполненного запроса, о чём можно судить благодаря булевой функции exec:

if($db->exec('CREATE TABLE foo (foo STRING)')) { …; }

Во время использования конструкций вроде «INSERT» и «UPDATE» очень важно помнить об опасности SQL-инъекции, поэтому вводимые данные лучше обрабатывать. Важно сразу уяснить, что использование стандартного addslashes() может привести к плохим последствиям. Поэтому в наборе средств работы с SQLite имеется специальная функция escapeString(). Как её использовать, думаю, итак понятно.

Ну и самое важное в любой работе с БД — это отлов ошибок. Для этих целей служат 2 функции: lastErrorCode() и lastErrorMsg(). Первая возвращает код ошибки, зафиксированной в результате выполнения самого последнего запроса, а вторая текстовое описание результата последней транзакции на английском языке. Обе функции не требуют никаких значений в качестве фактических параметров.

На этом я, пожалуй, остановлюсь и отправлю Вас за дополнительной порцией информации уже к официальной документации на английском языке, тем более, что рассказал я в этом уроке далеко не о всех возможностях класса-новобранца. За бортом остались, например, подготовка запроса к выполнению и создание callback-функций PHP, однако изложенного выше материала я считаю вполне достаточно для того, чтобы вникнуть в соль построения web-приложений на базе SQLite3.

1 отзыв    Далее   

Отзывы

sartas 17 Янв 2010 в 07:48 #

Трудно найти хостинг с Sqlite3 без PDO.
Где-то находил информацию, что в php sqlite3 будет использоваться только c PDO, а для поддержки совместимости со старыми версиями – нативная sqlite2.


Комментировать
Имя:
Почта:
Сайт:
Сообщение:
В сообщении можно использовать такие теги:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Это не спам