Function.sqlite-create-function
Aus PHP-Wiki
sqlite_create_function — Erzeugt eine "reguläre" nutzerdefinierte Funktion für den Gebrauch in SQL-Befehlen.
Beschreibung
Beschreibung
bool sqlite_create_function ( resource $db , string $SQL-Funktionsname ,mixed $callback [, int $num_args ] )
sqlite_create_function() erlaubt Ihnen, eine
PHP-Funktion in SQLite als UDF (User Defined
Function = Nutzerdefinierte Funktion> zu erzeugen, so dass diese
direkt in SQL-Befehlen genutzt werden kann.
db
spezifiziert die Datenbank, die um die Funktion
erweitert werden soll, SQL-Funktionsname
den Namen
der Funktion, wie er in den SQL-Befehlen genutzt werden soll.
callback
ist eine beliebige gültige PHP-Funktion oder
Methode, die aufgerufen werden soll, um die SQL-Funktion abzuarbeiten.
Der optionale Parameter num_args
wird vom
SQLite-Parser als Hinweis auf die Parameterzahl genutzt.
Es wird empfohlen, diesen Wert zu definieren, wenn Ihre Funktion immer
mit der gleichen Parameterzahl arbeitet.
Die UDF kann in jedem SQL-Befehl, der Funktionsaufrufe beinhalten
kann, genutzt werden, wie z.B. SELECT, UPDATE oder auch Trigger.
Beispiel #1 sqlite_create_function() Beispiel
<?php
function md5_rueckwaerts($string) {
return strrev(md5($string));
}
sqlite_create_function($db, 'md5rw', 'md5_rueckwaerts', 1);
$rows = sqlite_array_query($db, 'SELECT md5rw(filename) from files');
?>
In diesem Beispiel haben wir eine Funktion, die die md5-Summe eines
Strings berechnet und dann rueckwaerts ausliefert. Wenn der SQL-Befehl
durchgeführt wird, liefert er den Wert der Spalte filename durch unsere
Funktion transformiert zurück. Die Daten, die in $rows
stehen, enhalten also die bereits gewandelten Daten.
Die Eleganz dieser Technik ist das Vermeiden des Durchfahrens des kompletten
Abfrageergebnisses mit einer foreach()-Schleife.
PHP registriert ausserdem automatisch eine spezielle Funktion
mit dem Namen php
wenn die Datenbank db
zum ersten Mal geöffnet wird.
Diese Funktion kann genutzt werden, um eine beliebige PHP-Funktion
aufzurufen, ohne dass sie zunächst für SQLite erzeugt werden muss.
Beispiel #2 Beispiel der Nutzung einer PHP-Funktion
<?php
$rows = sqlite_array_query($db, "SELECT php('md5', filename) from files");
?>
In diesem Beispiel wird die Funktion md5() für
jeden Eintrag der Spalte filename in der Datenbank
aufgerufen und das Ergebnis in $rows
geschrieben.
Hinweis:
Aus Performancegründen kodiert/dekodiert PHP nicht automatisch die
Binärdaten der Spalten, die in die UDF/aus der UDF geliefert werden.
Daher müssen Sie die Parameter und Rückgabewerte der Funktion jeweils selbst
wandeln.
Tipp
Es wird empfohlen, die UDFs nicht für Binärdaten zu nutzen, wenn
Ihre Anwendung eine hohe Geschwindigkeit aufweisen soll.
Siehe auch sqlite_register_aggregate().