sqlite_create_function

(PHP 5)

sqlite_create_function --  Registra una funzione utente "regolare" da utilizzare nelle istruzioni SQL.

Descrizione

bool sqlite_create_function ( resource dbhandle, string function_name, mixed callback [, int num_args])

La funzione sqlite_create_function() permette di registrare una funzione PHP in SQLite come UDF (funzione definita dall'utente, User Defined Function), in modo che possa essere richiamata dalle istruzioni SQL.

Il parametro dbhandle indica l' handle dl database che si desidera estendere, function_name indica il nome della funzione che si vuole utilizzare nelle istruzioni SQL, callback è un callbak PHP valido che punti ad una funzione PHP che deve essere richiamata per gestire la funzione SQL. Il parametro opzionale num_args viene utilizzato come suggerimento dal parser delle espressioni di SQLite. Si raccomanda di indicare un valore nel caso la funzione accetti soltanto un numero fisso di parametri.

Le UDF possono essere utilizzate in qualsiasi istruzione SQL che permetta di richiamare funzioni, tipo SELECT e UPDATE e anche i triggers.

Esempio 1. Esempio di uso di 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;
}
?>

In questo esempio abbiamo una funzione che calcola il valore md5 di una stringa e lo inverte. Quando sono eseguite le istruzioni SQL, queste restituiscono il nome del file trasformato dalla nostra funzione. Il valore restituito in $rows contiene il risultato processato.

L'aspetto interessante di questa tecnica è che non è necessario elaborare i dati di una query utilizzando un ciclo foreach() dopo avere eseguito una query per ottenere i dati

Il PHP registra una speciale funzione chiamata php quando apre il database la prima volta. La funzione php può essere utilizzata per chiamare qualsiasi funzione PHP senza doverla registrare prima.

Esempio 2. Esempio dell'uso della funzione php

<?php
$rows
= sqlite_array_query($dbhandle, "SELECT php('md5', filename) from files");
?>

Questo esempio chiamerà la funzione md5() per ciasuna colonna filename del database e restituirà il risultato in $rows

Nota: Per motivi di performance, il PHP non convertirà in automatico i dati binari passati da/per la UDF. Occorre convertire manualmente i parametri e restituire i valori nel medesimo modo, se si desidera elaborare i dati binari. Guardare le pagine relative a sqlite_udf_encode_binary() e sqlite_udf_decode_binary() per maggiori dettagli.

Suggerimento: Non è raccomandabile l'uso delle UDF per processare dati binari, a meno che non siano richieste all'applicazione elevate performance.

Suggerimento: Si può utilizzare sqlite_create_function() e sqlite_create_aggregate() per sovrascrivere le funzioni SQL native in SQLite.

Vedere anche sqlite_create_aggregate().