SQLite3::busyTimeout

(PHP 5 >= 5.3.3, PHP 7, PHP 8)

SQLite3::busyTimeout — DĂ©finit le gestionnaire d'attente de la connexion

Description

public function SQLite3::busyTimeout(int $milliseconds): bool

Définit le gestionnaire d'attente qui patientera jusqu'à ce que la base de données ne soit plus verrouillée ou que le délai d'attente soit atteint.

Le gestionnaire d'attente est intĂ©grĂ© Ă  SQLite, aucune fonction de rappel n'a donc besoin d'ĂȘtre fournie. Lorsqu'une requĂȘte trouve la base de donnĂ©es verrouillĂ©e par une autre connexion, SQLite rĂ©essaie pendant milliseconds millisecondes au maximum. Si la base de donnĂ©es est toujours verrouillĂ©e au terme de ce dĂ©lai, la requĂȘte Ă©choue avec l'erreur database is locked (SQLITE_BUSY).

La maniĂšre dont cet Ă©chec se manifeste dĂ©pend de SQLite3::enableExceptions(). Lorsque les exceptions sont activĂ©es, une exception SQLite3Exception est lancĂ©e. Sinon, une E_WARNING est Ă©mise et la mĂ©thode qui a exĂ©cutĂ© la requĂȘte, comme SQLite3::exec() ou SQLite3::query(), retourne false.

Par dĂ©faut, aucun gestionnaire d'attente n'est dĂ©fini : une requĂȘte Ă©choue donc immĂ©diatement si la base de donnĂ©es est verrouillĂ©e.

Liste de paramĂštres

milliseconds

Le nombre maximal de millisecondes à attendre un verrou. Le fait de définir cette valeur à une valeur inférieure ou égale à zéro désactivera un gestionnaire d'attente précédemment défini.

Valeurs de retour

Retourne true si le dĂ©lai d'attente a Ă©tĂ© dĂ©fini, ou false si une erreur survient. La valeur de retour indique seulement si le dĂ©lai a Ă©tĂ© dĂ©fini. Elle ne signifie pas que les requĂȘtes suivantes obtiendront le verrou Ă  temps.

add a note

User Contributed Notes 3 notes

up
11
ppryor63 at gmail dot com ¶
12 years ago
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 zero or you will encounter "Database is busy" error message when calling query, querySingle, 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-zero timeout for reliability in concurrent environment.
up
6
anthony at domps dot fr ¶
5 years ago
It's possible to use PRAGMA to set busyTimeout (milliseconds) :

<?php

$db = new SQLite3('my.db');
$db->exec("PRAGMA busy_timeout=5000");

?>
up
3
dkarnout at gmail dot com ¶
11 years ago
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.