Funciones SQLite

CXLIV. Funciones SQLite

Introducci贸n

Se trata de una extensi贸n que permite emplear el motor de base de datos embebible SQLite. SQLite es una biblioteca de C que implementa un motor de base de datos SQL embebible. Las aplicaciones que emplean la biblioteca de SQLite pueden emplear bases de datos sin necesidad de instalar un motor de bases datos externo.

SQLite no es una biblioteca cliente para acceder a un servidor de bases datos. El propio SQLite es el servidor de base datos. La biblioteca SQLite lee y escribe directamente sobre los archivos de la base de datos que se encuentran en el disco.

Nota: Para m谩s informaci贸n puede acceder al sitio web oficial de SQLite: http://sqlite.org/.

Instalaci贸n

Lea el archivo INSTALL que viene con el paquete o utilice el instalador de PEAR con el siguiente comando "pear install sqlite". El propio SQLite ya est谩 incluido, as铆 que no es necesario instalar ning煤n programa adicional.

Los usuarios de Windows pueden descargar el archivo DLL de la extensi贸n SQLite en esta direcci贸n: (php_sqlite.dll).

En PHP 5, la extensi贸n SQLite y el propio motor de bases de datos est谩 incluido y compilado por defecto.

Instalaci贸n en Windows con cuentas de usuario sin privilegios: En los sistemas operativos Windows, las cuentas sin privilegios no tienen la variable de entorno TMP establecida por defecto. Por este motivo, SQLite crear谩 los archivos temporales en el directorio de Windows, lo que no es muy recomendable. La soluci贸n pasa por crear una variable de entorno llamada TMP para el servidor web o para la cuenta de usuario con la que se ejecuta el servidor web. Si el servidor empleado es Apache, puede establecerse esta variable mediante la directiva SetEnv del archivo de configuraci贸n httpd.conf. Por ejemplo:

SetEnv TMP c:/temp

Si no es posible establecer la variable a nivel de servidor, se puede realizar en el mismo script:

putenv('TMP=C:/temp');

La configuraci贸n debe hacer referencia a un directorio en el que el servidor web tenga permisos para crear archivos y por tanto para escribir y borrar los archivos creados. Si no tiene los permisos adecuados, se mostrar谩 el siguiente mensaje de error: malformed database schema - unable to open a temporary database file for storing temporary tables

Requisitos

Para poder utilizar estas funciones, se debe compilar PHP con soporte para SQLite o cargar la extensi贸n SQLite de forma din谩mica desde el archivo php.ini.

Tipos de recursos

La interfaz de SQLite utiliza 2 recursos: el primero es de la conexi贸n con la base de datos y el segundo es el resultado.

Constantes predefinidas

Estas constantes est谩n definidas por esta extensi贸n y estar谩n disponibles solamente cuando la extensi贸n ha sido o bien compilada dentro de PHP o grabada din谩micamente en tiempo de ejecuci贸n.

Las funciones sqlite_fetch_array() y sqlite_current() emplean una constante para seleccionar los diferentes tipos de matrices del resultado. Los diferentes constantes definidas son las siguientes:

Constantes del tipo de resultado de SQLite

SQLITE_ASSOC (int)

La matriz contiene el nombre de las columnas como 铆ndice de los valores.

SQLITE_BOTH (int)

La matriz contiene el nombre de las columnas y un 铆ndice num茅rico como 铆ndice de los valores.

SQLITE_NUM (int)

La matriz contiene un 铆ndice num茅rico como 铆ndice de los valores. El 铆ndice empieza asignando el 0 al primer campo del resultado.

Algunas funciones devuelven c贸digos de estado. Se han definido los siguientes c贸digos:

Constantes del c贸digo de estado de SQLite

SQLITE_OK (int)

Resultado exitoso.

SQLITE_ERROR (int)

Error de SQL o base de datos desconocida.

SQLITE_INTERNAL (int)

Error l贸gico interno de SQLite.

SQLITE_PERM (int)

Permiso de acceso denegado.

SQLITE_ABORT (int)

La funci贸n de callback solicit贸 una interrupci贸n.

SQLITE_BUSY (int)

El archivo de base de datos est谩 bloqueado.

SQLITE_LOCKED (int)

Una tabla de la base de datos est谩 bloqueada.

SQLITE_NOMEM (int)

Error en la reserva de memoria.

SQLITE_READONLY (int)

Se intent贸 escribir en una base de datos de solo lectura.

SQLITE_INTERRUPT (int)

La operaci贸n finaliza贸 internamente.

SQLITE_IOERR (int)

Error de E/S en el disco.

SQLITE_CORRUPT (int)

La imagen de la base de datos en el disco est谩 corrupta.

SQLITE_NOTFOUND (int)

Tabla o registro (internos) no encontrados.

SQLITE_FULL (int)

No se pudo rea帽izar la inserci贸n porque la base de datos est谩 llena.

SQLITE_CANTOPEN (int)

No se pudo abrir el archivo de la base de datos.

SQLITE_PROTOCOL (int)

Error de bloqueo de base de datos.

SQLITE_EMPTY (int)

La tabla (interna) de la base de datos est谩 vac铆a.

SQLITE_SCHEMA (int)

Se ha cambiado el esquema de la base de datos.

SQLITE_TOOBIG (int)

Demasiados datos para una fila de la tabla.

SQLITE_CONSTRAINT (int)

Interrupci贸n debida a la violaci贸n de una restricci贸n (constraint).

SQLITE_MISMATCH (int)

Confusi贸n en el tipo de los datos.

SQLITE_MISUSE (int)

La librer铆a se emple贸 de forma incorrecta.

SQLITE_NOLFS (int)

Se intent贸 utilizar unas caracter铆sticas de SO no soportadas en el sistema.

SQLITE_AUTH (int)

Error de autenticaci贸n.

SQLITE_ROW (int)

El proceso interno dispone de otra fila.

SQLITE_DONE (int)

El proceso interno ha finalizado la ejecuci贸n.

Clases predefinidas

SQLiteDatabase

Representa una base de datos de SQLite abierta.

Constructor

  • __construct - construye un nuevo objeto de tipo SQLiteDatabase

M茅todos

  • query - Ejecuta una consulta

  • queryExec - Ejecuta una consulta sin resultado

  • arrayQuery - Ejecuta una consulta y devuelve el resultado como una matriz

  • singleQuery - Ejecuta una consulta y devuelve o una matriz para una columna o el valor de la primera fila

  • unbufferedQuery - Ejecuta una consulta que devuelve el resultado de forma inmediata (unbuffered)

  • lastInsertRowid - Devuelve el identificador de la 煤ltima fila que se ha insertado

  • changes - Devuelve el n煤mero de filas que se han modificado tras la 煤ltima sentencia SQL

  • createAggregate - Registra una FDU (Funci贸n Definida por el Usuario) empleada para agregar resultados en las sentencias SQL

  • createFunction - Registra una FDU (Funci贸n Definida por el Usuario) para emplearla en las sentencias SQL

  • busyTimeout - Establece el valor o deshabilita la duraci贸n del temporizador de ocupado

  • lastErorr - Devuelve el 煤ltimo c贸digo de error del 煤ltimo error producido

  • fetchColumnTypes - Devuelve una matriz con los tipos de las columnas de una tabla determinada

SQLiteResult

Representa un resultado almacenado (buffered) de SQLite

M茅todos

  • fetch - Obtiene la siguiente fila del resultado y la devuelve como una matriz

  • fetchObject - Obtiene la siguiente fila del resultado y la devuelve como un objeto

  • fetchSingle - Obtiene la primera columna del resultado y la devuelve en una cadena

  • fetchAll - Obtiene todas las filas del resultado y las devuelve como una matriz de matrices

  • column - Obtiene una columna de la fila actual del resultado

  • numFields - Obtiene el n麓mero de campos del resultado

  • fieldName - Obtiene el nombre de un campo del resultado

  • current - Obtiene la fila actual del resultado y la devuelve como una matriz

  • key - Obtiene el 铆ndice de la fila actual

  • next - Se desplaza hasta el siguiente n煤mero de fila

  • valid - Indica si hay disponibles m谩s filas

  • rewind - Se desplaza hasta el primer n煤mero de fila del resultado

  • prev - Se desplaza hasta el anterior n煤mero de fila

  • hasPrev - Indica si hay disponible alguna fila anterior

  • numRows - Obtiene el n麓mero de filas en el resultado

  • seek - Se desplaza hasta un determinado n煤mero de fila

SQLiteUnbuffered

Representa un resultado no almacenado (unbuffered) de SQLite. Los resultados no almacenados son secuenciales y por tanto solamente se puede avanzar en ellos (no retroceder).

M茅todos

  • fetch - Obtiene la siguiente fila del resultado y la devuelve como una matriz

  • fetchObject - Obtiene la siguiente fila del resultado y la devuelve como un objeto

  • fetchSingle - Obtiene la primera columna del resultado y la devuelve en una cadena

  • fetchAll - Obtiene todas las filas del resultado y las devuelve como una matriz de matrices

  • column - Obtiene una columna de la fila actual del resultado

  • numFields - Obtiene el n麓mero de campos del resultado

  • fieldName - Obtiene el nombre de un campo del resultado

  • current - Obtiene la fila actual del resultado y la devuelve como una matriz

  • next - Se desplaza hasta el siguiente n煤mero de fila

  • valid - Indica si hay disponibles m谩s filas

Configuraci贸n en tiempo de ejecuci贸n

El comportamiento de estas funciones est谩 afectado por los valores definidos en php.ini.

Tabla 1. Configure Options de SQLite

NameDefaultChangeableRegistro de cambios
sqlite.assoc_case"0"PHP_INI_ALLDisponible desde PHP 5.0.0.
For further details and definitions of the PHP_INI_* constants, see the Ap茅ndice G.

A continuaci贸n se presenta una corta explicaci贸n de las directivas de configuraci贸n.

sqlite.assoc_case int

Uso de 铆ndices hash sin distinguir may煤sculas y min煤sculas (0), solo may煤sculas (1) o solo min煤sculas(2).

Esta opci贸n se emplea cuando se requiere compatibilidad con otros sistemas de bases de datos, donde los nombres de las columnas siempre se devuelven o en may煤sculas o en min煤sculas, independientemente de la forma en la que se almacenan los nombres de los campos en el esquema de la base de datos.

La librer铆a SQLite devuelve el nombre de las columnas tal y como aparecen en el esquema de base de datos. Si el valor de sqlite.assoc_case es 0, se mantendr谩n los nombres originales. Si se pone a 1 o a 2, PHP convertir谩 los nombres originales a may煤sculas o en min煤sculas respectivamente.

El uso de esta opci贸n introduce una peque帽a penalizaci贸n en el rendimiento, pero es significativamente m谩s r谩pida que hacerlo manualmente en el script de PHP.

Tabla de contenidos
sqlite_array_query -- Ejecuta una consulta contra una base de datos y devuelve el resultado en forma de matriz
sqlite_busy_timeout -- Establece la duraci贸n del temporizador de ocupado o deshabilita los temporizadores
sqlite_changes --  Devuelve el n煤mero de filas que se han modificado en la 煤ltima sentencia SQL
sqlite_close -- Cierra una base de datos SQLite abierta
sqlite_column -- Obtiene una columna de la fila actual del resultado
sqlite_create_aggregate -- Registra una FDU (funci贸n definida por el usuario) de grupo normal para su uso en sentencias SQL
sqlite_create_function --  Registra una FDU (funci贸n definida por el usuario) normal para su uso en sentencias SQL
sqlite_current -- Obtiene la fila actual del resultado en forma de matriz
sqlite_error_string -- Devuelve la descripci贸n del error producido a partir de un c贸digo de error
sqlite_escape_string -- Escapa una cadena de texto para poder usarla como par谩metro en una consulta
sqlite_exec -- Ejecuta una consulta que no produce resultado
sqlite_factory -- Abre una base de datos SQLite y devuelve un objeto SQLiteDatabase
sqlite_fetch_all -- Obtiene todas las filas del resultado en forma de matriz de matrices
sqlite_fetch_array -- Obtiene la siguiente fila del resultado en forma de matriz
sqlite_fetch_column_types --  Obtiene una matriz con los tipos de las columnas de una tabla
sqlite_fetch_object -- Obtiene la siguiente fila del resultado en forma de objeto
sqlite_fetch_single -- Obtiene la primera columna del resultado en forma de cadena
sqlite_fetch_string -- Alias of sqlite_fetch_single()
sqlite_field_name -- Obtiene el nombre de un campo
sqlite_has_more -- Indica si existen m谩s filas disponibles
sqlite_has_prev -- Indica si est谩 disponible una fila anterior
sqlite_key -- Devuelve el 铆ndice de la fila actual
sqlite_last_error -- Devuelve el c贸digo de error del 煤ltimo error producido en la base de datos
sqlite_last_insert_rowid -- Devuelve el identificador de fila de la 煤ltima fila insertada
sqlite_libencoding -- Devuelve la codificaci贸n de la librer铆a SQLite que se est谩 empleando
sqlite_libversion -- Devuelve la versi贸n de la librer铆a SQLite que se est谩 empleando
sqlite_next -- Se desplaza hasta el siguiente n煤mero de fila
sqlite_num_fields -- Obtiene el n煤mero de campos de un resultado
sqlite_num_rows -- Obtiene el n煤mero de filas de un resultado almacenado (buffered)
sqlite_open -- Abre una base de datos de SQLite y la crea si no exist铆a
sqlite_popen --  Abre una base de datos de SQLite de forma persistente y la crea si no exist铆a
sqlite_prev -- Se desplaza hasta el anterior n煤mero de fila
sqlite_query -- Ejecuta una consulta sobre la base de datos y devuelve un manejador del resultado
sqlite_rewind -- Se desplaza hasta el primer n煤mero de fila
sqlite_seek -- Se desplaza hasta un determinado n煤mero de fila de un resultado almacenado (buffered)
sqlite_single_query --  Ejecuta una consulta y devuelve o una matriz para una columna o el valor de la primera fila
sqlite_udf_decode_binary -- Decodifica los datos binarios que se pasan como par谩metro a las funciones FDU (funci贸n definida por el usuario)
sqlite_udf_encode_binary -- Codifica los datos binarios antes de devolverlos de una FDU (funci贸n definida por el usuario)
sqlite_unbuffered_query -- Ejecuta una consulta sobre la base de datos cuyo resultado no almacena todos los datos devueltos
sqlite_valid -- Indica si hay m谩s filas disponibles en el resultado