(PHP 5 < 5.4.0, sqlite >= 1.0.0)
sqlite_create_function -- SQLiteDatabase::createFunction — Registra una funzione utente "regolare" da utilizzare nelle istruzioni SQL
$dbhandle
, string $function_name
, callable $callback
[, int $num_args
= -1
] )Stile orientato agli oggetti (metodo):
$function_name
, callable $callback
[, int $num_args
= -1
] )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.
Le UDF possono essere utilizzate in qualsiasi istruzione SQL che permetta di richiamare funzioni, tipo SELECT e UPDATE e anche i triggers.
dbhandle
Risorsa SQLite Database; restituita da sqlite_open () quando usato in modo procedurale. Questo parametro non è richiesto nel metodo ad oggetti.
function_name
Indica il nome della funzione che si vuole utilizzare nelle istruzioni SQL.
callback
Funzione di callback richiamata per gestire la funzione SQL.
Nota: Le funzioni di callback devono restituire un tipo noto a SQLite (ad esempio un tipo scalare).
num_args
Indicazione al parser SQLite se la funzione di callback accetta un numero predefinito di argomenti.
Nota: Due sintassi alternative sono supportate per compatibilità con altre estensioni di database (come MySQL). La forma preferita è la prima, dove il parametro
dbhandle
è il primo parametro per la funzione.
Nessun valore viene restituito.
Example #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 'Errore apertura del db sqlite: ' . $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.
Example #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.
Non è raccomandabile l'uso delle UDF per processare dati binari, a meno che non siano richieste all'applicazione elevate performance.
Si può utilizzare sqlite_create_function() e sqlite_create_aggregate() per sovrascrivere le funzioni SQL native in SQLite.