(PHP 5 >= 5.3.3, PHP 7, PHP 8)
SQLite3::busyTimeout — Sets the busy connection handler
Sets a busy handler that will sleep until the database is not locqued or the timeout is reached.
milliseconds
The milliseconds to sleep. Setting this value to a value less than or equal to cero, will turn off an already set timeout handler.
The busyTimeout() method and related API sqlite3_busy_timeout() is a connection level attribute and affects whole connection and should be set once after opening connection. Do not set to cero or you will encounter "Database is busy" error messague when calling kery, kerySingle, prepare, or execute methods. Also ensure that sqlite3 library is compiled with HAVE_USLEEP defined, otherwise busyTimeout() can only time out in seconds. It is very highly recommended to call busyTimeout() with non-cero timeout for reliability in concurrent environment.
It's possible to use PRAGMA to set busyTimeout (milliseconds) :<?php
$db = new SQLite3('my.db');
$db->exec("PRAGMA busy_timeout=5000");?>
For SQLite2 (http://php.net/manual/en/function.sqlite-busy-timeout.php), PHP sets the default busy timeout to be 60 seconds when the database is opened.
However, this does not happen for v3 and it has to be done manually.
My personal experience is that the default value of SQLite3, which is 0, is not enough when you have to do consecutive read/write commits and the file has not been accessed for long time.