Описание
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.