Forum und email

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

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

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.

Tip

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.

Tip

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().