- Основы использования SQLite3 в PHP
- Преимущества и ограничения
- Поддержка SQLite3 в PHP
- Особенности SQLite3
- Создание, открытие и закрытие базы данных
- Выполнение запроса
- Подготовленные запросы
- Выборка данных
- Sqliteman — инструмент администрирования БД Sqlite
- SQLite3
- Класс SQLite3
- Обзор классов
- Предопределённые константы
- Основы использования SQLite3 в PHP
- Преимущества и ограничения
- Поддержка SQLite3 в PHP
- Особенности SQLite3
- Создание, открытие и закрытие базы данных
- Выполнение запроса
- Подготовленные запросы
- Выборка данных
- Инструменты администрирования БД SQLite
Основы использования SQLite3 в PHP
В этой статье рассмотрим основы SQLite3 для PHP — полезной библиотеки (расширение для PHP), написанной на языке C, которая осуществляет механизм работы с данными с помощью SQL. Фактически, это безтиповая база данных, которая содержится всего в одном файле, который в свою очередь находится в самом проекте (в его файловой системе). Технически в этой базе всё — строки. Мы указываем тип данных для самой библиотеки, чтобы она сама «разруливала» сортировку по числовым полям.
Преимущества и ограничения
- Полностью бесплатна
- Нет необходимости в средствах администрирования
- Высокая производительность и легкая переносимость
- Поддержка процедурного и объектно-ориентированного интерфейсов
- Хранение больших объемов данных
- Хранение строк и бинарных данных неограниченной длины
- Предназначена для небольших и средних приложений
- Основной выигрыш в производительности, если преобладают операции вставки и выборки данных
- При чрезвычайно активном обращении к данным, или в случае частых сортировок, SQLite работает медленнее своих конкурентов
Поддержка SQLite3 в PHP
- ВPHP 5.0 поддержка SQLite версии 2 была встроена в ядро
- Начиная с PHP 5.1 поддержка SQLite вынесена за пределы ядра php_sqlite
- В PHP 5.3 добавлена поддержка SQLite версии 3 php_sqlite3
- В PHP 5.4 поддержка SQLite версии 2 удалена php_sqlite
Особенности SQLite3
CREATE TABLE users(id INTEGER, name TEXT, age INTEGER)
CREATE TABLE users(id, name, age)
Для задания первичного ключа
id INTEGER PRIMARY KEY id INTEGER PRIMARY KEY AUTOINCREMENT
Экранирование строк через двойной апостроф
Создание, открытие и закрытие базы данных
//Создаём или открываем базу данных test.db $db = new SQLite3("test.db"); //Закрываем базу данных без удаления объекта $db->close(); //Открываем другую базу данных для работы $db->open("another.db"); //Удаляем объект unset($db);
Выполнение запроса
//Экранирование строк $name = $db->escapeString($name); //Для запросов без выборки данных $sql = "INSERT INTO users (name, age) VALUES ('$name', 25)"; //Возвращает значение булева типа $result = $db->exec($sql); //Количество изменённых записей echo $db->changes(); //Отслеживание ошибок echo $db->lastErrorCode(); echo $db->lastErrorMsg();
Подготовленные запросы
$sql = "INSERT INTO users (name, age) VALUES (:name, :age)"; //Готовим запрос $stmt = $db->prepare($sql); //Привязываем параметры $stmt->bindParam(':name',$name); $stmt->bindParam(':age',$age); //Исполняем запрос $result = $stmt->execute(); //Закрываем при необходимости $stmt->close();
Выборка данных
$sql = "SELECT name, age FROM users"; // В случае неудачи возвращает false $result = $db->querySingle($sql); //В $result - значение первого поля первой записи $result = $db->querySingle($sql, true); // В $result - массив значений первой записи // Стандартная выборка $result = $db->query($sql); // Обработка выборки $row = $result->fetchArray(); // SQLITE3_BOTH // Получаем ассоциативный массив $row = $result->fetchArray(SQLITE3_ASSOC); // Получаем индексированный массив $row = $result->fetchArray(SQLITE3_NUM);
Sqliteman — инструмент администрирования БД Sqlite
Предлагаю присмотреться к очень полезному инструменту для Sqlite3. Это аналог привычного phpmyadmin для MySql. Программа имеет неплохой графический интерфейс на русском языке, является портативной и не требует установки на ПК. Скачать Sqliteman можно по этой ссылке.
Ещё один популярный менеджер баз данных Sqlite — SQLiteStudio
SQLite3
To enable CURL and SQLITE3 on Windows with PHP 7.4 edit httpd.conf and php.ini as below:
# load php.ini from chosen directory
PHPIniDir «$/php»
# load PHP 7.4 on Windows
LoadModule php7_module «$/php/php7apache2_4.dll»
# load CURL on Windows
LoadFile «$/php/libssh2.dll»
# load SQLITE3 on Windows
LoadFile «$/php/libsqlite3.dll»
Now CURL and SQLITE3 are enabled and working fine on Windows on PHP 7.4.
As of PHP 5.4 support for Sqlite2 has been removed. I have a large web app that was built with sqlite2 as the database backend and thus it exploded when I updated PHP. If you’re in a similar situation I’ve written a few wrapper functions that will allow your app to work whilst you convert the code to sqlite3.
Firstly convert your DB to an sqlite3 db.
sqlite OLD.DB .dump | sqlite3 NEW.DB
Then add the following functions to your app:
function sqlite_open ( $location , $mode )
<
$handle = new SQLite3 ( $location );
return $handle ;
>
function sqlite_query ( $dbhandle , $query )
<
$array [ ‘dbhandle’ ] = $dbhandle ;
$array [ ‘query’ ] = $query ;
$result = $dbhandle -> query ( $query );
return $result ;
>
function sqlite_fetch_array (& $result , $type )
<
#Get Columns
$i = 0 ;
while ( $result -> columnName ( $i ))
<
$columns [ ] = $result -> columnName ( $i );
$i ++;
>
$resx = $result -> fetchArray ( SQLITE3_ASSOC );
return $resx ;
>
?>
They’re not perfect by any stretch but they seem to be working ok as a temporary measure while I convert the site.
Hope that helps someone
PHP doesn’t seem to support password protection for SQLite3. We can specify password on the db(I think) but you will still be able to open the DB without using a password so it is not working.
PHP 5.3.3 introduced sqlite3::busyTimeout(int milliseconds) which does not currently seem to be documented.
It believe it acts like sqlite::busyTimeout — that is it tells sqlite3 to call an internal busyHandler if SQLITE_BUSY is returned from any call which waits a short period and then retries. It continues to do this until milliseconds milliseconds have elapsed and then returns the SQLITE_BUSY status.
I don’t know whether the default 60 second value is in place if this function is not called.
Класс SQLite3
Класс, предоставляющий доступ к API SQLite 3 базе данных.
Обзор классов
public __construct ( string $filename , int $flags = SQLITE3_OPEN_READWRITE | SQLITE3_OPEN_CREATE , string $encryptionKey = «» )
public backup ( SQLite3 $destination , string $sourceDatabase = «main» , string $destinationDatabase = «main» ): bool
public createAggregate (
string $name ,
callable $stepCallback ,
callable $finalCallback ,
int $argCount = -1
): bool
public createFunction (
string $name ,
callable $callback ,
int $argCount = -1 ,
int $flags = 0
): bool
public open ( string $filename , int $flags = SQLITE3_OPEN_READWRITE | SQLITE3_OPEN_CREATE , string $encryptionKey = «» ): void
public openBlob (
string $table ,
string $column ,
int $rowid ,
string $database = «main» ,
int $flags = SQLITE3_OPEN_READONLY
): resource | false
Предопределённые константы
SQLite3::DENY
SQLite3::IGNORE
SQLite3::CREATE_INDEX
SQLite3::CREATE_TABLE
SQLite3::CREATE_TEMP_INDEX
SQLite3::CREATE_TEMP_TABLE
SQLite3::CREATE_TEMP_TRIGGER
SQLite3::CREATE_TEMP_VIEW
SQLite3::CREATE_TRIGGER
SQLite3::CREATE_VIEW
SQLite3::DELETE
SQLite3::DROP_INDEX
SQLite3::DROP_TABLE
SQLite3::DROP_TEMP_INDEX
SQLite3::DROP_TEMP_TABLE
SQLite3::DROP_TEMP_TRIGGER
SQLite3::DROP_TEMP_VIEW
SQLite3::DROP_TRIGGER
SQLite3::DROP_VIEW
SQLite3::INSERT
SQLite3::PRAGMA
SQLite3::READ
SQLite3::SELECT
SQLite3::TRANSACTION
SQLite3::UPDATE
SQLite3::ATTACH
SQLite3::DETACH
SQLite3::ALTER_TABLE
SQLite3::REINDEX
SQLite3::ANALYZE
SQLite3::CREATE_VTABLE
SQLite3::DROP_VTABLE
SQLite3::FUNCTION
SQLite3::SAVEPOINT
SQLite3::COPY
SQLite3::RECURSIVE
Основы использования SQLite3 в PHP
В этой статье рассмотрим основы SQLite3 для PHP — полезной библиотеки (расширение для PHP), написанной на языке C, которая осуществляет механизм работы с данными с помощью SQL. Фактически, это безтиповая база данных, которая содержится всего в одном файле, который в свою очередь находится в самом проекте (в его файловой системе). Технически в этой базе всё — строки. Мы указываем тип данных для самой библиотеки, чтобы она сама «разруливала» сортировку по числовым полям.
Преимущества и ограничения
- Полностью бесплатна
- Нет необходимости в средствах администрирования
- Высокая производительность и легкая переносимость
- Поддержка процедурного и объектно-ориентированного интерфейсов
- Хранение больших объемов данных
- Хранение строк и бинарных данных неограниченной длины
- Предназначена для небольших и средних приложений
- Основной выигрыш в производительности, если преобладают операции вставки и выборки данных
- При чрезвычайно активном обращении к данным, или в случае частых сортировок, SQLite работает медленнее своих конкурентов
Поддержка SQLite3 в PHP
- ВPHP 5.0 поддержка SQLite версии 2 была встроена в ядро
- Начиная с PHP 5.1 поддержка SQLite вынесена за пределы ядра php_sqlite
- В PHP 5.3 добавлена поддержка SQLite версии 3 php_sqlite3
- В PHP 5.4 поддержка SQLite версии 2 удалена php_sqlite
Особенности SQLite3
CREATE TABLE users(id INTEGER, name TEXT, age INTEGER)
CREATE TABLE users(id, name, age)
Для задания первичного ключа
id INTEGER PRIMARY KEY id INTEGER PRIMARY KEY AUTOINCREMENT
Экранирование строк через двойной апостроф
Создание, открытие и закрытие базы данных
//Создаём или открываем базу данных test.db $db = new SQLite3("test.db"); //Закрываем базу данных без удаления объекта $db->close(); //Открываем другую базу данных для работы $db->open("another.db"); //Удаляем объект unset($db);
Выполнение запроса
//Экранирование строк $name = $db->escapeString($name); //Для запросов без выборки данных $sql = "INSERT INTO users (name, age) VALUES ('$name', 25)"; //Возвращает значение булева типа $result = $db->exec($sql); //Количество изменённых записей echo $db->changes(); //Отслеживание ошибок echo $db->lastErrorCode(); echo $db->lastErrorMsg();
Подготовленные запросы
$sql = "INSERT INTO users (name, age) VALUES (:name, :age)"; //Готовим запрос $stmt = $db->prepare($sql); //Привязываем параметры $stmt->bindParam(':name',$name); $stmt->bindParam(':age',$age); //Исполняем запрос $result = $stmt->execute(); //Закрываем при необходимости $stmt->close();
Выборка данных
$sql = "SELECT name, age FROM users"; // В случае неудачи возвращает false $result = $db->querySingle($sql); //В $result - значение первого поля первой записи $result = $db->querySingle($sql, true); // В $result - массив значений первой записи // Стандартная выборка $result = $db->query($sql); // Обработка выборки $row = $result->fetchArray(); // SQLITE3_BOTH // Получаем ассоциативный массив $row = $result->fetchArray(SQLITE3_ASSOC); // Получаем индексированный массив $row = $result->fetchArray(SQLITE3_NUM);
Инструменты администрирования БД SQLite
Sqliteman — полезный инструмент для администрирования баз данных SQLite3. Это аналог привычного phpmyadmin для MySql. Программа имеет неплохой графический интерфейс на русском языке, является портативной и не требует установки на ПК. Скачать Sqliteman можно по этой ссылке .
Ещё один популярный менеджер баз данных SQLite — SQLiteStudio