(PHP 5 < 5.4.0, sqlite >= 1.0.0)
sqlite_create_function -- SQLiteDatabase::createFunction — Регистрирует "стандартную" функцию (UDF) для использования в SQL-запросах
$dbhandle
, string $function_name
, callable $callback
[, int $num_args
= -1
] )Объектно-ориентированный стиль (метод):
$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.