PHPKonf 2020 Online

sqlite_create_function

SQLiteDatabase::createFunction

(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

Descripción

sqlite_create_function ( resource $dbhandle , string $function_name , callable $callback [, int $num_args = -1 ] ) : void

Estilo orientado a objetos (método):

public SQLiteDatabase::createFunction ( string $function_name , callable $callback [, int $num_args = -1 ] ) : void

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.

Parámetros

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.

Valores devueltos

No devuelve ningún valor.

Ejemplos

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.

Sugerencia

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.

Sugerencia

Puede utilizar sqlite_create_function() y sqlite_create_aggregate() para reemplazar las funciones SQL nativas de SQLite.

Ver también

add a note add a note

User Contributed Notes

There are no user contributed notes for this page.
To Top