sqlite_create_function
(PHP 5, PECL pdo_sqlite:0.2-0.3 sqlite:1.0-1.0.3)
sqlite_create_function — Felhasználó által definiált SQL függvény regisztrálása
LeÃrás
Az sqlite_create_function() által lehetÅ‘ség nyÃlik arra, hogy PHP-ben Ãrt függvényünket SQL lekérésekben. Ezeket egyezményesen UDF (felhasználó által definiált) néven függvényeknek hÃvjuk.
A dbhandle paraméterben hivatkozhatunk arra a megnyitott adatbázisra, amelyhez függvényünket átmenetileg hozzárendeljük. A function_name adható meg, milyen néven szeretnénk használni az adott függvényt az SQL kérésekben. A callback paraméterben a PHP-ben Ãrt függvényünk nevét kell közölnünk, amely az adott feladatot megvalósÃtja. A függvénynek olyan visszatérési értékkel kell szolglnia, amit az SQLite fel tud dolgozni (lásd: skaláris tÃpusok type). A nem kötelezÅ‘en megadandó num_args paraméterben adhatunk tippet az SQLite feldolgozú számára, hány paramétert is vár függvényünk. Ha megvalósÃtásunk kötött számú adatot vár, ajánlott ezt az értéket beállÃtani.
Ezek az UDF függvények mindenhol felhasználhatók, ahol függvények bevetése amúgy is lehetséges. Ez lehet éppen SELECT vagy UPDATE is, de akár kioldók (trigger) megadásakor is.
Example#1 sqlite_create_function() példa
<?php
function md5_es_forditott_sorrend($string)
{
return strrev(md5($string));
}
if ($dbhandle = sqlite_open('mysqlitedb', 0666, $sqliteerror)) {
sqlite_create_function($dbhandle, 'hanyatt_md5', 'md5_es_forditott_sorrend', 1);
$sql = 'SELECT hanyatt_md5(filename) FROM files';
$rows = sqlite_array_query($dbhandle, $sql);
} else {
echo 'Nem sikerült megnyitni az adatbázist: ' . $sqliteerror;
exit;
}
?>
A példában szereplÅ‘ függvény egy adott szöveg md5 összegét adja vissza, megfordÃtott karaktersorrendben. Amikor az SQL kérés végrehajtódik, függvényünk visszaadja az adatbázisból kinyert fájlnév átalakÃtott változatát. Végül az eredmény a $rows tömbbe kerül.
Kifejezetten hasznos megoldás az, mivel Ãgy nem szükséges utólag végigszaladni a kapott tömb minden elemén csak azért, hogy az átalakÃtásokat utólag végrehajtsuk.
A PHP minden esetben létrehoz egy php néven elérhetÅ‘ függvényt, mely segÃtségével bármely PHP-ben Ãrt függvényünket felhasználhatjuk az SQL kérésekben anélkül, hogy azt külön regisztrálnánk.
Example#2 Példa a PHP által regisztrált php SQL függvény használatára
<?php
$rows = sqlite_array_query($dbhandle, "SELECT php('md5', filename) from files");
?>
A példában a PHP md5() füvvényének SQL kérésekben való használatára láthatunk példát. Az eredmény hasonlatosan az előző példához, itt is a $rows tömbben adja vissza az adatokat.
Note: Hatékonysági okokból A PHP nem kódolja ill. dekódolja azon bináris mezÅ‘adatokat, amelyek ilyen UDF függvényen mennek keresztül. Ilyenkor ezt magunknak kell megtennünk. A kódolás / dekódolás kapcsán a sqlite_udf_encode_binary() és a és a sqlite_udf_decode_binary() függvények leÃrását érdemes fellapozni még.
Nem ajánlott ez a módszer bináris adatok feldolgozására, legalábbis ha kicsit is számÃt a hatékonyság.
Az sqlite_create_function() és az sqlite_create_aggregate() függvények segÃtségével az SQLite meglevÅ‘ beépÃtett SQL függvényei is lecserélhetÅ‘k.
Lásd még: sqlite_create_aggregate().