sqlite_create_aggregate
sqlite_current
SQLite
PHP Manual

# sqlite_create_function

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

sqlite_create_function — Регистрирует функцию для использования в SQL запросах

### Описание

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

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

Аргумент `dbhandle` задает базу данных, для которой определяется новая функция, `function_name` - имя функции, которое будкт использоваться в SQL запросах. Аргумент `callback` задает PHP функцию, которая будет вызываться при обращении к определяемой SQL функции. Необязательный аргумент `num_args` задает количество аргументов, которое принимает фунция. Рекомендуется всегда передавать этот аргумент, если функция принимает фиксированное количество аргументов.

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

Пример #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 'Error opening sqlite db: ' . $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.

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

See also sqlite_create_aggregate().

sqlite_create_aggregate
sqlite_current
SQLite
PHP Manual