As of PHP 5.4 support for Sqlite2 has been removed. I have a large web app that was built with sqlite2 as the database backend and thus it exploded when I updated PHP. If you're in a similar situation I've written a few wrapper functions that will allow your app to work whilst you convert the code to sqlite3.
Firstly convert your DB to an sqlite3 db.
sqlite OLD.DB .dump | sqlite3 NEW.DB
Then add the following functions to your app:
<?php
function sqlite_open($location,$mode)
{
$handle = new SQLite3($location);
return $handle;
}
function sqlite_query($dbhandle,$query)
{
$array['dbhandle'] = $dbhandle;
$array['query'] = $query;
$result = $dbhandle->query($query);
return $result;
}
function sqlite_fetch_array(&$result,$type)
{
#Get Columns
$i = 0;
while ($result->columnName($i))
{
$columns[ ] = $result->columnName($i);
$i++;
}
$resx = $result->fetchArray(SQLITE3_ASSOC);
return $resx;
}
?>
They're not perfect by any stretch but they seem to be working ok as a temporary measure while I convert the site.
Hope that helps someone
SQLite3
- Introduction
- Installation/Configuration
- Constantes pré-définies
- SQLite3 — La classe SQLite3
- SQLite3::busyTimeout — Définit le gestionnaire d'attente de la connexion
- SQLite3::changes — Retourne le nombre de lignes modifiées (ou insérées, effacées) par la dernière requête SQL
- SQLite3::close — Ferme la connexion avec la base de données
- SQLite3::__construct — Instantie un objet SQLite3 et ouvre la base de données SQLite 3
- SQLite3::createAggregate — Enregistre une fonction PHP à utiliser comme fonction d'aggrégation SQLite
- SQLite3::createFunction — Enregistre une fonction PHP à utiliser comme function scalaire SQL
- SQLite3::escapeString — Retourne une chaîne nettoyée
- SQLite3::exec — Exécute une requête sur une base de données
- SQLite3::lastErrorCode — Retourne le code erreur de la dernière requête SQL ayant échouée
- SQLite3::lastErrorMsg — Retourne le message d'erreur, en anglais, de la dernière requête ayant échouée
- SQLite3::lastInsertRowID — Retourne l'identifiant de la ligne corrspondant à la dernière requête de type INSERT
- SQLite3::loadExtension — Tente de charger une extension de la bibliothèque SQLite
- SQLite3::open — Ouvre une base de données SQLite
- SQLite3::prepare — Prépare une requête SQL pour exécution
- SQLite3::query — Exécute une requête SQL
- SQLite3::querySingle — Exécute une requête et retourne un seul résultat
- SQLite3::version — Retourne la version de la bibliothèque SQLite3
- SQLite3Stmt — La classe SQLite3Stmt
- SQLite3Stmt::bindParam — Lie un paramètre à une variable de requête
- SQLite3Stmt::bindValue — Lie la valeur d'un paramètre à une variable de requête
- SQLite3Stmt::clear — Supprime tous les paramètres actuellement liés
- SQLite3Stmt::close — Ferme une requête préparée
- SQLite3Stmt::execute — Exécute une requête préparée
- SQLite3Stmt::paramCount — Retourne le nombre de paramètres d'une requête préparée
- SQLite3Stmt::reset — Réinitialise une requête préparée
- SQLite3Result — La classe SQLite3Result
- SQLite3Result::columnName — Retourne le nom d'une colonne
- SQLite3Result::columnType — Retourne le type d'une colonne
- SQLite3Result::fetchArray — Récupère un jeu de résultats sous la forme d'un tableau associatif
- SQLite3Result::finalize — Ferme un jeu de résultats
- SQLite3Result::numColumns — Retourne le nombre de colonnes du jeu de résultats
- SQLite3Result::reset — Repositionne le pointeur sur la première ligne du jeu de résultats
Anonymous
06-Dec-2011 12:56
Anonymous
09-Mar-2011 03:31
If you get the following error for non-encrypted databases:
Warning: SQLite3::query() [sqlite3.query]: Unable to prepare statement: 26, file is encrypted or is not a database in …
... use PDO instead of this library.
alan at chandlerfamily dot org dot uk
09-Aug-2010 01:36
PHP 5.3.3 introduced sqlite3::busyTimeout(int milliseconds) which does not currently seem to be documented.
It believe it acts like sqlite::busyTimeout - that is it tells sqlite3 to call an internal busyHandler if SQLITE_BUSY is returned from any call which waits a short period and then retries. It continues to do this until milliseconds milliseconds have elapsed and then returns the SQLITE_BUSY status.
I don't know whether the default 60 second value is in place if this function is not called.
