SQLite es una biblioteca escrita en C que implementa un motor de base de datos SQL92 (algunas características de SQL92 no están implementadas). SQLite se distribuye bajo la licencia de dominio público. La página web de SQLite es http://www.sqlite.org.
En la versión 4 de PHP, SQLite se podía utilizar como base de datos instalando un módulo PECL. A partir de la versión 5 de PHP, SQLite está incluido en PHP, por lo que está disponible sin necesidad de realizar ninguna instalación adicional.
Los nombres de las funciones de php que permiten utilizar SQLite en PHP empiezan por sqlite_ y son similares a los que permiten acceder otras bases de datos utilizables desde PHP (mysql, postgresql, etc). El manual de PHP incluye un capítulo dedicado a SQLite.
Como SQLite y PHP son proyectos independientes, la versión incluida en PHP no tiene por qué ser la última versión disponible de SQLite. Hay dos funciones que permiten conocer la versión de SQLite instalada en PHP:
En PHPhome 2.3.4, que incluye PHP 5.0.0, la versión de SQLite incluida es la 2.8.14, publicada el 9 de junio de 2004, con codificación iso8859:
<?php print "<p>Versión PHP: ".php_version()."</p>"; print "<p>Versión SQLite: ".sqlite_libversion()."</p>"; print "<p>Codificación: ".sqlite_libencoding()."</p>"; ?> |
Versión PHP: 5.0.0 Versión SQLite: 2.8.14 Codificación: iso8859 |
En SQLite, una base de datos es normalmente un fichero, aunque también pueden abrirse bases de datos en memoria.
La función para abrir una base de datos es sqlite_open(). El argumento de sqlite_open() es la ruta del archivo en el servidor (o :memory: en el caso de crear la base de datos en memoria. Si la base de datos no existe, la función crea una base de datos nueva. La función devuelve un manejador (handle), que se utiliza en el resto de funciones que acceden a la base de datos.
En el ejemplo siguiente, la variable $caminodb almacena la ruta donde se encuentra la base de datos y la variable $db el manejador de la base de datos.
<?php $caminodb = $_SERVER['DOCUMENT_ROOT']."db\\prueba01.db"; $db = sqlite_open($caminodb) or die("No puedo abrir la base de datos "); ?> |
Una vez abierta la base de datos, se pueden realizar consultas SQL utilizando varias funciones. Cada función devuelve el resultado de la consulta de forma ligeramente distinta.
La función sqlite_array_query() devuelve la respuesta de la consulta en forma de matriz. No es conveniente utilizar esta función si el resultado de la consulta contiene muchos registros, ya que puede ocupar mucha memoria en el servidor.
Explicar las diferencias entre ellas.
En estos ejemplos, la variable $db es un manejador creado con sqlite_open().
Para crear una tabla, se utiliza la consulta CREATE TABLE. Para crear un campo índice hay que definirlo INTEGER PRIMARY KEY.
<?php sqlite_query($db, "CREATE TABLE personas(id INTEGER PRIMARY KEY, nombre, apellidos)"); ?> |
Para borrar una tabla, se utiliza la consulta DROP TABLE.
<?php sqlite_query($db, "DROP TABLE personas"); ?> |
Para añadir un registro a una tabla, se utiliza la consulta INSERT INTO.
<?php sqlite_query($db, "INSERT INTO personas values (NULL , 'pepito' , 'conejo')" ); ?> |
Al insertar una cadena de texto, algunos caracteres pueden dar problemas, por lo que conviene utilizar la función sqlite_escape_string(). Esta función parece dar problemas con las cadenas vacías, así que parece que sólo hay que aplicarla tras comprobar que la cadena no es vacía.
<?php $apellido = ($_REQUEST['apellido']=="") ? "" : sqlite_escape_string($_REQUEST['apellido']); sqlite_query($db, "INSERT INTO personas values (NULL, 'pepito' , '$apellido')" ); ?> |
Lógicamente, si se ha utilizado la función sqlite_escape_string() al introducir una cadena en la base de datos, es necesario deshacer los cambios al mostrar la cadena. Para ello se puede utilizar la función stripslashes():
<?php print "<p>Apellidos:".stripslashes($resultado['apellidos'])."</p> ?> |
Para modificar un registro a una tabla, se utiliza la consulta UPDATE.
<?php sqlite_query($db, "UPDATE personas SET nombre='Juan', apellidos='López' WHERE id='4'"); ?> |
Para borrar un registro de una tabla, se utiliza la consulta DELETE FROM.
<?php sqlite_query($db, "DELETE FROM personas WHERE id='1'"); ?> |
Para obtener registros que cumplan determinados criterios se utiliza la consulta SELECT.
<?php $resultado = sqlite_array_query($db, "SELECT * FROM personas ORDER BY apellidos DESC", SQLITE_ASSOC); ?> |
La consulta SELECT permite efectuar búsquedas en cadenas utilizando el condicional LIKE o NOT LIKE y los comodines _ (cualquier carácter) o % (cualquier número de caracteres). La primera consulta del ejemplo siguiente devolvería todos los registros en los que el primer apellido es Pérez, mientras que la segunda consulta devolvería todos los registros en los que el primer o segundo apellido es Pérez.
<?php $resultado = sqlite_array_query($db, "SELECT * FROM personas WHERE apellidos LIKE 'Pérez%'", SQLITE_ASSOC); ?> |
<?php $resultado = sqlite_array_query($db, "SELECT * FROM personas WHERE apellidos LIKE '%Pérez%'", SQLITE_ASSOC); ?> |
Se pueden realizar consultas de unión:
<?php $resultado = sqlite_array_query($db, "SELECT * FROM personas, ciudades WHERE personas.nacido-localidad=ciudades.id", SQLITE_ASSOC); ?> |
Si se utiliza la misma tabla dos veces se deben utilizar alias:
<?php $resultado = sqlite_array_query($db, "SELECT * FROM personas, ciudades AS nacido, ciudades AS fallecido WHERE personas.nacido-localidad=nacido.id AND personas.fallecido-localidad=fallecido.id", SQLITE_ASSOC); ?> |