sqlite_create_function

SQLiteDatabase::createFunction

(PHP 5 < 5.4.0, sqlite >= 1.0.0)

sqlite_create_function -- SQLiteDatabase::createFunction Registriert eine "reguläre" nutzerdefinierte Funktion für den Gebrauch in SQL-Befehlen

Beschreibung

sqlite_create_function ( resource $dbhandle , string $function_name , callable $callback [, int $num_args = -1 ] ) : void

Objektorientierter Stil (Methode):

public SQLiteDatabase::createFunction ( string $function_name , callable $callback [, int $num_args = -1 ] ) : void

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.

UDF sind in jedem SQL-Befehl nutzbar, der Funktionsaufrufe wie SELECT, UPDATE oder auch Trigger beinhalten kann.

Parameter-Liste

dbhandle

Die Ressource des SQLite-Ergebnisses, erzeugt von sqlite_open() wenn in prozeduralem Kontext genutzt. Dieser Parameter wird nicht benötigt, wenn die objektorientierte Notation genutzt wird.

function_name

Name der Funktion, wie er in den SQL-Befehlen genutzt werden soll.

callback

Eine beliebige gültige PHP-Funktion oder Methode, die aufgerufen werden soll, um die SQL-Funktion abzuarbeiten.

Hinweis: "Callback"-Funktionen sollten einen Variablentyp zurückgeben, der von SQLite erkannt wird (z.B. Skalare).

num_args

Hinweis für den SQLite-Parser auf die Parameterzahl der "Callback"-Funktion. Es wird empfohlen, diesen Wert zu definieren, wenn Ihre Funktion immer mit der gleichen Parameterzahl arbeitet.

Hinweis: Zwei alternative Syntaxen werden für die Kompatibilität mit anderen Datenbank-Erweiterungen (wie z.B. MySQL) unterstützt. Die bevorzugte Form ist die erste, bei der der Parameter dbhandle der erste Parameter der Funktion ist.

Rückgabewerte

Es wird kein Wert zurückgegeben.

Beispiele

Beispiel #1 sqlite_create_function()-Beispiel

<?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 
'Fehler beim Öffnen der Datenbankverbindung: ' $sqliteerror;
    exit;
}
?>

In diesem Beispiel haben wir eine Funktion, die die md5-Summe eines Strings berechnet und dann rückwärts 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 außerdem automatisch eine spezielle Funktion mit dem Namen php, wenn die Datenbank dbhandle 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 zur Nutzung einer beliebigen PHP-Funktion

<?php
$rows 
sqlite_array_query($dbhandle"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 Performanzgrü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. Die Funktionen sqlite_udf_encode_binary() und sqlite_udf_decode_binary() sind dabei behilflich.

Tipp

Es wird empfohlen, die UDFs nicht für Binärdaten zu nutzen, wenn Ihre Anwendung eine hohe Geschwindigkeit aufweisen soll.

Tipp

sqlite_create_function() und sqlite_create_aggregate() können dazu genutzt werden, native SQlite-Funktionen zu überschreiben.

Siehe auch