Регистрирует "стандартную" функцию (UDF) для использования в SQL-запросах


SQLiteDatabase::createFunction

(PHP 5 < 5.4.0, sqlite >= 1.0.0)

sqlite_create_function -- SQLiteDatabase::createFunctionРегистрирует "стандартную" функцию (UDF) для использования в SQL-запросах

Описание

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

Объектно-ориентированный стиль (метод):

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

sqlite_create_function() позволяет зарегистрировать PHP функцию для использования в SQLite в качестве UDF (User Defined Function - функция, определенная пользователем), что позволяет использовать эту функцию в SQL-запросах.

Определенная таким образом функция может быть использована в любом SQL-запросе, допускающем использование функций, например SELECT и UPDATE, а также в триггерах.

Список параметров

dbhandle

Ресурс базы данных SQLite, полученный из функции sqlite_open() в случае использования процедурного подхода. Этот параметр не требуется при использовании объектно-ориентированного подхода.

function_name

Имя функции, используемой в SQL-запросах.

callback

Callback-функция, обрабатывающая указанную SQL-функцию.

Замечание: Callback-функции должны возвращать тип, понятный SQLite (т.е. скалярный).

num_args

Подсказка парсеру SQLite, если callback-функция принимает известное количество аргументов.

Замечание: Поддерживаются два альтернативных синтаксиса для совместимости с другими расширениями баз данных (например, MySQL). Предпочитаемая форма - первая, в которой параметр dbhandle является первым параметром функции.

Возвращаемые значения

Эта функция не возвращает значения после выполнения.

Примеры

Пример #1 Пример использования sqlite_create_function()

<?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 
'Ошибка открытия базы sqlite: ' $sqliteerror;
    exit;
}
?>

В этом примере мы определяем функцию, которая вычисляет MD5-хэш строки, а затем обращает полученную строку. При выполнении SQL-запроса, значение поля filename преобразуется нашей функцией. Массив $rows содержит обработанный результат.

Достоинство этой техники в том, что нет необходимости обрабатывать полученный результат в цикле.

При открытии базы данных, регистрируется функция с именем php. Эта функция может быть использована для вызова любой функции PHP без регистрации.

Пример #2 Пример использования функции php

<?php
$rows 
sqlite_array_query($dbhandle"SELECT php('md5', filename) from files");
?>

В этом примере, функция md5() будет вызвана для поля filename в каждой записи.

Замечание:

Для повышения производительности, PHP не кодирует и не декодирует бинарные данные, передаваемые в UDF и возвращаемые из нее. Вы должны позаботиться о кодировании/раскодировании самостоятельно, если есть необходимость обрабатывать бинарные данные. Смотрите описания функций sqlite_udf_encode_binary() и sqlite_udf_decode_binary().

Подсказка

Не рекомендуется использовать UDF для обработки бинарных данных, за исключением случаев, когда нет необходимости достичь высокого быстродействия.

Подсказка

sqlite_create_function() и sqlite_create_aggregate() могут быть использованы для переопределения встроенных функций SQLite.

Смотрите также

  • sqlite_create_aggregate() - Регистрирует агрегирующую функцию для использования в SQL-запросах