SQLite - очень быстрая, функциональная и удобная база данных, которая поддерживает стандарт SQL. Т.е. при работе с данной базой данных у нас есть возможность делать транзакции и выполнять все основные команды SQL (такие как INSERT, UPDATE, DELETE, CREATE и прочие). К тому же (по информации с официального сайта разработчиков), код данной БД на 100% покрыт тестами, что говорит о том, что исключены какие-либо баги, проблемы и прочие неудобства при работе с ней. Кроме этого, SQLite не требует какого-либо визуального интерфейса для администрирования. Конечно же, есть различные утилиты для визуальной работы (SQLiteStudio, SQLite Manager, phpLiteAdminer и др.), но к ним прибегают не так часто. Базе данных не требуется никакой сервер базы данных, т.е. мы работаем с ней исключительно локально (!) и файл базы данных располагается прямо посреди всех остальных файлов нашего проекта. Кстати, именно за счёт этого обеспечивается очень быстрая скорость работы (SQLite - самая быстрая из всех баз данных, согласно заявлениям разработчиков), ведь для соединения и выполнения любого запроса не нужно тратить время на соединение с сервером! База данных совершенно бесплатна, используется в огромном количестве устройств (например, во всех смартфонах на Android). Также, база данных SQLite поддерживает как процедурный, так и объектный интерфейс. Основные типы данных - NULL, INTEGER, REAL, TEXT, BLOD.
У SQLite3 (при работе с ней через PHP) есть три основных класса:
- SQLite3 (отвечает за основную работу);
- SQLite3Stmt (отвечает за создание преподготовленных запросов);
- SQLite3Result (отвечает за вывод результата).
Итак, как создать базу данных SQLite3 и работать с ней
Для создания базы данных, в PHP файле пишем код:
$sq3 = new SQLite3('database.sq3');
Расширение файла может быть любым, sq3 я написал для примера.
А теперь, давайте создадим таблицу в нашей базе данных:
if(!filesize('database.sq3')) {
$sq3->exec('CREATE TABLE new (col STRING)');
}
Т.е. мы создали таблицу new, в которой есть 1 колонка с именем col.
В условие данный запрос мы заключили для того, чтобы таблица создавалась только один раз. Ведь если мы не сделаем этого, то при каждом запросе у нас будет производиться попытка создания данной таблицы заново, а нам этого, разумеется, не нужно.
А теперь, давайте вставим данные в нашу таблицу. Пишем в файле, ниже:
$sq3->query('INSERT INTO new VALUES("test 1")');
$sq3->query('INSERT INTO new VALUES("test 2")');
$sq3->query('INSERT INTO new VALUES("best 3")');
А теперь сделаем запрос на выборку данных из нашей базы:
$result = $sq3->query('SELECT * FROM new');
while($row = $result->fetchArray(SQLITE3_ASSOC)) {
print_r($row);
}
Также давайте сделаем вывод ошибок, для того, чтобы проанализировать их, если они будут:
echo '<hr>', $sq3->lastErrorCode(); echo '<hr>', $sq3->lastErrorMsg();
SQLite3 преподготовленные запросы, используя класс SQLite3Stmt
Чтобы защититься от SQL-инъекций есть только 1 проверенный выход - преподготовленные запросы к базе данных. В SQLite3 за это отвечает отдельный класс - SQLite3Stmt. При работе с данным классом мы внутри запроса создаём некий "ярлык", со строго определённым заранее типом данных. И в дальнейшем обращаемся к нему и совершенно безопасно обрабатываем данные. Давайте лучше посмотрим это на примере.
// Подготавливаем запрос, при котором мы будем делать выборку данных через LIKE в колонке col
// Вместо значения для поиска мы используем "ярлык", который мы назвали :label
$stmt = $sq3->prepare('SELECT * FROM new WHERE col LIKE :label');
// К данному "ярлыку" мы через метод bindValue привязываем строковое значение "tes"
// Т.е. мы ищем все значения, в тексте которых есть "tes". Такие значения у нас в таблице -
// (test 1 и test2). Знаки процентов у "tes" мы ставим, т.к. это стандартный синтаксис LIKE
$stmt->bindValue(':label', '%tes%', SQLITE3_TEXT);
// Этой строкой мы выполняем данный запрос и записываем результат в переменную $result2
$result2 = $stmt->execute();
// выводим данные в цикле
while($row2 = $result2->fetchArray(SQLITE3_ASSOC)) {
print_r($row2);
}
Мы с вами научились работать с базой данных SQLite3. Надеюсь, Вам пригодится данный опыт при работе с Вашими проектами!
Подписывайтесь на группу в ВКонтакте, вступайте в сообщество на Facebook, чтобы всегда быть в курсе актуальных выпусков
Web development blog!