PDO::sqliteCreateFunction
(PHP 5 >= 5.1.0, PHP 7, PECL pdo_sqlite >= 1.0.0)
PDO::sqliteCreateFunction — Регистрация пользовательской функции для использования в SQL-запросах
Описание
$function_name
, callable $callback
, int $num_args
= -1
, int $flags
= 0
) : boolЭта функция является ЭКСПЕРИМЕНТАЛЬНОЙ. Поведение этой функции, ее имя и относящаяся к ней документация могут измениться в последующих версиях PHP без уведомления. Используйте эту функцию на свой страх и риск.
Этот метод позволяет вам регистрировать функцию PHP как пользовательскую функцию SQLite (User Defined Function, UDF), что позволит использовать ее в SQL-запросах.
UDF можно использовать в любом SQL-запросе, в котором позволяется использовать функции, например SELECT, UPDATE, а также в триггерах.
Список параметров
-
function_name
-
Имя функции для использовании в запросах.
-
callback
-
Функция обратного вызова для обработки вызовов SQL-функции.
Замечание: Функция обратного вызова должна возвращать значение понятного SQLite типа (то есть скалярного типа).
Эта функция должна быть определена следующим образом:
-
value
-
Первый аргумент передаваемый в SQL-функцию.
-
values
-
Последующие аргументы.
-
-
num_args
-
Количество аргументов, которое принимает функция. Если задать равным
-1
, то функция будет принимать любое количество аргументов. -
flags
-
Побитовая конъюнкция (ИЛИ) флагов. На данный момент поддерживается только флаг
PDO::SQLITE_DETERMINISTIC
, который определяет то, что функция всегда возвращает одинаковый результат для одинаковых входных значений.
Возвращаемые значения
Возвращает true
в случае успешного завершения или false
в случае возникновения ошибки.
Список изменений
Версия | Описание |
---|---|
7.1.4 |
Добавлен параметр flags .
|
Примеры
Пример #1 Пример использования PDO::sqliteCreateFunction()
<?php
function md5_and_reverse($string)
{
return strrev(md5($string));
}
$db = new PDO('sqlite:sqlitedb');
$db->sqliteCreateFunction('md5rev', 'md5_and_reverse', 1);
$rows = $db->query('SELECT md5rev(filename) FROM files')->fetchAll();
?>
В этом примере мы определили функцию, вычисляющую md5 сумму строки и
переворачивающую ее. Когда SQL-запрос будет запущен, полученные
значения filename будут преобразованы этой функцией. Результирующий набор
$rows
будет содержать преобразованные значения.
Красота подобного подхода заключается в том, что вам не нужно после получения результирующего набора пробегаться по нему циклом foreach для вычисления нужных значений.
Вы можете использовать PDO::sqliteCreateFunction и PDO::sqliteCreateAggregate для переопределения стандартных аггрегирующих функций SQLite.