(No version information available, might be only in CVS)
SQLiteDatabase->createFunction — Registra una FDU (función definida por el usuario) normal para su uso en sentencias SQL
Método que sigue el estilo orientado a objetos:
sqlite_create_function() permite registrar una función PHP para que SQLite la emplee como FDU (función definida por el usuario). De esta forma, la función se puede llamar desde las sentencias SQL.
La función FDU se puede utilizar en cualquier sentencia que pueda invocar funciones, como SELECT y UPDATE, además de en triggers.
El recurso que identifica la base de datos SQLite (y que es el que devuelve la función sqlite_open()). Este parámetro no se requiere cuando se emplea el método orientado a objetos.
El nombre de la función a utilizar en las sentencias SQL.
Función de callback que se encarga de manejar la función SQL.
Note: Las funciones de callback deben devolver un tipo de datos entendido por SQLite (esto es, tipo escalar).
Valor destinado al parseador de SQLite si la función de callback acepta un número predeterminado de argumentos.
Note: Two alternative syntaxes are supported for compatibility with other database extensions (such as MySQL). The preferred form is the first, where the dbhandle parameter is the first parameter to the function.
Example#1 Ejemplo de sqlite_create_function()
<?php
function md5_invertida($cadena)
{
return strrev(md5($cadena));
}
if ($manejador_bd = sqlite_open('mysqlitedb', 0666, $error_sqlite)) {
sqlite_create_function($manejador_bd, 'md5inv', 'md5_invertida', 1);
$consulta = 'SELECT md5inv(nombre_archivo) FROM archivos';
$filas = sqlite_array_query($manejador_bd, $consulta);
} else {
echo 'Error al abriri a base de datos de SQLite: ' . $error_sqlite;
exit;
}
?>
La función del ejemplo calcula el valor del resumen md5 de una cadena y lo invierte antes de devolverlo. Cuando se ejecuta la sentencia SQL, devuelve el valor del nombre de archivo devuelto por esta función. Los datos devueltos en la variable $filas contienen los resultados procesados.
La gran ventaja de esta técnica es que no se tienen que procesar los resultados mediante un bucle de tipo foreach() una vez obtenidos los resultados.
PHP registra una función especial llamada php cuando la base de datos se abre por primera vez. La función php se puede emplear para llamar a cualquier función PHP sin necesidad de tener que registrarla previamente.
Example#2 Ejemplo de uso de una función PHP
<?php
$filas = sqlite_array_query($manejador_bd, "SELECT php('md5', nombre_archivo) from archivos");
?>
El ejemplo llama a la función md5() de PHP para cada columna llamada nombre_archivo de la base de datos y devuelve el resultado en la variable $filas
Note: PHP no realiza el proceso de codificación/decodificación de datos binarios de forma automática, ya que esto podría penalizar seriamente el rendimiento de las aplicaciones. Por tanto, se debe codificar/decodificar manualmente los parámetros y valores devueltos por estas funciones. Para más detalles, se puede consultar la documentación relativa a las funciones sqlite_udf_encode_binary() y sqlite_udf_decode_binary().
No se recomienda que las propias funciones FDU se encarguen del procesamiento de los datos binarios, a no ser que el rendimiento de la aplicación no sea un elemento determinante.
Se pueden emplear las funciones sqlite_create_function() y sqlite_create_aggregate() para sobrecargar las funciones SQL nativas de SQLite.