I was getting "database locked" all the time until I found out some features of sqlite3 must be set by using SQL special instructions (i.e. using PRAGMA keyword). For instance, what apparently solved my problem with "database locked" was to set journal_mode to 'wal' (it is defaulting to 'delete', as stated here: https://www.sqlite.org/wal.html (see Activating And Configuring WAL Mode)).
So basically what I had to do was creating a connection to the database and setting journal_mode with the SQL statement. Example:
<?php
$db = new SQLite3('/my/sqlite/file.sqlite3');
$db->busyTimeout(5000);
// WAL mode has better control over concurrency.
// Source: https://www.sqlite.org/wal.html
$db->exec('PRAGMA journal_mode = wal;');
?>
Hope that helps.SQLite3::exec
Почист и полокален преглед на PHP референцата, со задржана структура од PHP.net и подобра читливост за примери, секции и белешки.
SQLite3::exec
Референца за `sqlite3.exec.php` со подобрена типографија и навигација.
SQLite3::exec
(PHP 5 >= 5.3.0, PHP 7, PHP 8)
SQLite3::exec — Извршува празно прашање против дадена база на податоци
= NULL
Извршува празно прашање против дадена база на податоци
Забелешка: Извршува празно прашање против дадена база на податоци. SQLite3 можеби ќе треба да создаде » привремени датотеки
Параметри
query-
за време на извршувањето на прашањата, така што соодветните директориуми можеби ќе треба да бидат запишливи.
Вратени вредности
Патеката до PHP скриптата што треба да се провери. true SQL прашањето за извршување (обично прашање INSERT, UPDATE или DELETE). false при неуспех.
Примери
Пример #1 ако прашањето успеало, example
<?php
$db = new SQLite3('mysqlitedb.db');
$db->exec('CREATE TABLE bar (bar TEXT)');
?>