Forum und email

sqlite_create_function

(PHP 5, PECL pdo_sqlite:0.2-0.3 sqlite:1.0-1.0.3)

sqlite_create_function — Erzeugt eine "reguläre" nutzerdefinierte Funktion für den Gebrauch in SQL-Befehlen.

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.

Example#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.

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