database table is locked

Imprimer
Si vous ecrivez un programme un tant soit peu complexe en PHP en utilisant PDO et SQLite3, vous avez certainement été confronté à ce problème.
Une erreur du type : 'database table is locked'

Avec PDO il faut absolument vider les résultats d'une requête.
Si par exemple, vous exécuter une requête de sélection dont le résultat contient 15 lignes, tant que vous ne récuperez pas toutes ces lignes la table est 'locked'.

Pour eviter ce problème, il y a deux solutions :
- La première consiste utiliser uniquement 'fetchAll' pour récuperer les résultats.
$res = $connId->query('SELECT * FROM database;');
$tabResult = $res->fetchAll();


- La deuxièmes, qui est utilisé dans SQLiteManager 1.2.0!! ; avant d'éxecuter une nouvelle requête, on verifie si l'object résultat existe, et dans ce cas on éxecute 'closeCursor' sur celui-ci
if(is_object($res)) $res->closeCursor();