Работаем с SQLite3: подключение к базе данных, создание запросов


05-08-2019
Денис Л.
Sql
3
4812
Работаем с SQLite3: подключение к базе данных, создание запросов

SQLite - очень быстрая, функциональная и удобная база данных, которая поддерживает стандарт SQL. Т.е. при работе с данной базой данных у нас есть возможность делать транзакции и выполнять все основные команды SQL (такие как INSERT, UPDATE, DELETE, CREATE и прочие). К тому же (по информации с официального сайта разработчиков), код данной БД на 100% покрыт тестами, что говорит о том, что исключены какие-либо баги, проблемы и прочие неудобства при работе с ней. Кроме этого, SQLite не требует какого-либо визуального интерфейса для администрирования. Конечно же, есть различные утилиты для визуальной работы (SQLiteStudio, SQLite Manager, phpLiteAdminer и др.), но к ним прибегают не так часто. Базе данных не требуется никакой сервер базы данных, т.е. мы работаем с ней исключительно локально (!) и файл базы данных располагается прямо посреди всех остальных файлов нашего проекта. Кстати, именно за счёт этого обеспечивается очень быстрая скорость работы (SQLite - самая быстрая из всех баз данных, согласно заявлениям разработчиков), ведь для соединения и выполнения любого запроса не нужно тратить время на соединение с сервером! База данных совершенно бесплатна, используется в огромном количестве устройств (например, во всех смартфонах на Android). Также, база данных SQLite поддерживает как процедурный, так и объектный интерфейс. Основные типы данных - NULL, INTEGER, REAL, TEXT, BLOD.

У SQLite3 (при работе с ней через PHP) есть три основных класса:

  1. SQLite3 (отвечает за основную работу);
  2. SQLite3Stmt (отвечает за создание преподготовленных запросов);
  3. 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!