(PHP 5 < 5.4.0, sqlite >= 1.0.0)
sqlite_create_function -- SQLiteDatabase::createFunction — Registra una función "regular" definida por el usuario para ser usada en sentencias SQL
$dbhandle
, string $function_name
, callable $callback
[, int $num_args
= -1
] )Estilo orientado a objetos (método):
$function_name
, callable $callback
[, int $num_args
= -1
] )sqlite_create_function() permite registrar una función PHP con SQLite como un UDF (User Defined Function), para así poder ser llamada desde dentro de sus sentencias SQL.
La UDF puede ser usada en cualquier sentencia SQL que pueda llamar a funciones, tales como sentencias SELECT y UPDATE, y también en triggers.
dbhandle
El recurso de base de datos devuelto desde sqlite_open(). Este parámetro no es requerido cuando se usa el método "Orientado a objetos".
function_name
El nombre de la función que se va a usar en las sentencias SQL.
callback
Función de retorno para manejar la función SQL definida.
Nota: Las funciones de retorno deben devolver un tipo que SQLite sea capaz de entender (por ejemplo tipo escalar).
num_args
Sugerencia para el intérprete de SQLite si la función acepta un número predeterminado de argumentos.
Nota: Dos sintaxis alternativas son soportadas para la compatibilidad con otras extensiones de base de datos (tal como MySQL). La forma preferida es la primera, donde el parámetro
dbhandle
es el primero de la función.
No devuelve ningún valor.
Ejemplo #1 Ejemplo de sqlite_create_function()
<?php
function md5_and_reverse($string)
{
return strrev(md5($string));
}
if ($dbhandle = sqlite_open('mysqlitedb', 0666, $sqliteerror)) {
sqlite_create_function($dbhandle, 'md5rev', 'md5_and_reverse', 1);
$sql = 'SELECT md5rev(filename) FROM files';
$rows = sqlite_array_query($dbhandle, $sql);
} else {
echo 'Error opening sqlite db: ' . $sqliteerror;
exit;
}
?>
En este ejemplo tenemos una función que calcula el valor md5 de un string, y luego lo pone del revés. Cuando se ejecuta la sentencia SQL, devuelve el valor del nombre de fichero transformado por otra función. Los datos devueltos en $rows
contienen el resultado de la consulta procesada.
La belleza de esta técnica es que no se necesita procesar el resultado utilizando un loop foreach despues de que se hayan consultado los datos.
PHP registra una función especial llamada php cuando la base de datos se abre por primera vez. La función php puede ser usada para llamar cualquier función PHP sin tener que registrarla primero.
Ejemplo #2 Ejemplo de uso de la función PHP
<?php
$rows = sqlite_array_query($dbhandle, "SELECT php('md5', filename) from files");
?>
Este ejemplo llamará la función md5() en cada columna
filename en la base de datos y devolverá el resultado en $rows
Nota:
Por razones de funcionamiento, PHP no codifica/descodifica automaticamente datos binarios pasados para y desde los UDFs. Es necesario codificar/descodificar manualmente los parámetros y valores devueltos si se necesita procesar los datos binarios de esta manera. Echar un vistazo a sqlite_udf_encode_binary() y sqlite_udf_decode_binary() para más información.
No se recomienda usar UDFs para manejar el proceso de datos binarios, a menos que el alto rendimiento no sea un requisito indispensable para su aplicación.
Puede utilizar sqlite_create_function() y sqlite_create_aggregate() para reemplazar las funciones SQL nativas de SQLite.