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
- Introducción
- Instalación/Configuración
- Constantes predefinidas
- SQLite3 — La clase de SQLite3
- SQLite3::busyTimeout — Establecer el gestor de conexión ocupado
- SQLite3::changes — Devolver el número de filas de la base de datos que fueron cambiadas (o insertadas, o eliminadas) por la sentencia SQL más reciente
- SQLite3::close — Cerrar la conexión a la base de datos
- SQLite3::__construct — Instanciar un objeto de la clase SQLite3 y abrir una base de datos de SQLite 3
- SQLite3::createAggregate — Registrar una función de PHP para usarla como una función totalizadora de SQL
- SQLite3::createFunction — Registrar una función de PHP para usarla como una función escalar de SQL
- SQLite3::escapeString — Devolver una cadena que ha sido debidamente escapada
- SQLite3::exec — Ejecutar una consulta que no devuelve resultados en una base de datos dada
- SQLite3::lastErrorCode — Devolver el código numérico del resultado de la petición SQLite que falló más recientemente
- SQLite3::lastErrorMsg — Devolver texto en inglés describiendo la petición SQLite que falló más recientemente
- SQLite3::lastInsertRowID — Devolver el ID de la fila de la sentencia INSERT más reciente realizada en la base de datos
- SQLite3::loadExtension — Intentar cargar una biblioteca de extensiones de SQLite
- SQLite3::open — Abrir una base de datos SQLite
- SQLite3::prepare — Preparar una sentencia SQL para su ejecución
- SQLite3::query — Ejecutar una consulta SQL
- SQLite3::querySingle — Ejecutar una consulta y devolver un único resultado
- SQLite3::version — Devolver la versión de la biblioteca SQLite3 como una constante de cadena y como un número
- SQLite3Stmt — La clase SQLite3Stmt
- SQLite3Stmt::bindParam — Vincular un parámetro a una variable de sentencia
- SQLite3Stmt::bindValue — Vincular el valor de un parámetro a una variable de sentencia
- SQLite3Stmt::clear — Limpiar todos los parámetros vinculados actuales
- SQLite3Stmt::close — Cerrar una sentencia preparada
- SQLite3Stmt::execute — Ejecutar una sentencia preparada y devuolver un objeto de conjunto de resultados
- SQLite3Stmt::paramCount — Devolver el número de parámetros dentro de la sentencia preparada
- SQLite3Stmt::reset — Reiniciar la sentencia preparada
- SQLite3Result — La clase SQLite3Result
- SQLite3Result::columnName — Devolver el nombre de la columna n-ésima
- SQLite3Result::columnType — Devolver el tipo de la columna n-ésima
- SQLite3Result::fetchArray — Obtener una fila de resultados en forma de un array asociativo o indexado o ambos
- SQLite3Result::finalize — Cerrar el conjunto de resultados
- SQLite3Result::numColumns — Devolver el número de columnas del conjunto de resultados
- SQLite3Result::reset — Reiniciar el conjunto de resultados a la primera fila
Anonymous ¶
1 year ago
Anonymous ¶
2 years ago
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 ¶
2 years ago
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.
