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!