Особенности работы с SQLite
пример с оптимальными настройками
try {
// Подключение
$pdo = new PDO('sqlite:/var/www/data/app.db');
// Основные атрибуты
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$pdo->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);
$pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
$pdo->setAttribute(PDO::ATTR_TIMEOUT, 10);
// Настройки SQLite
$pdo->exec('PRAGMA foreign_keys = ON;');
$pdo->exec('PRAGMA journal_mode = WAL;');
$pdo->exec('PRAGMA synchronous = NORMAL;');
$pdo->exec('PRAGMA cache_size = 20000;');
$pdo->exec('PRAGMA temp_store = MEMORY;');
} catch (PDOException $e) {
error_log('PDO Error: ' . $e->getMessage());
die('Ошибка базы данных');
}
ATTR_ERRMODE = ERRMODE_EXCEPTION → Ловить ошибки сразу, а не искать их по всему коду.
ATTR_EMULATE_PREPARES = false → Использовать нативные подготовленные запросы для безопасности.
PRAGMA foreign_keys = ON → Включить проверку внешних ключей (по умолчанию отключено!).
PRAGMA journal_mode = WAL → Снизить число блокировок при параллельной записи.
ATTR_TIMEOUT → Избежать бесконечного ожидания при блокировках.
cache_size и temp_store → Ускорить работу за счёт кэширования в памяти.