Pdo\Sqlite::createFunction
Регистрирует пользовательскую функцию для вызова в SQL-инструкциях
&reftitle.description;
publicboolPdo\Sqlite::createFunctionstringfunction_namecallablecallbackintnum_args-1intflags0
Метод регистрирует пользовательскую PHP-функцию в SQLite
для вызова в SQL-инструкциях.
Пользовательскую функцию вызывают в триггерах или SQL-запросах наподобие SELECT, UPDATE
или других предложениях с поддержкой вызова функций.
При совпадении названий метод переопределит встроенную SQL-функцию.
&reftitle.parameters;
function_name
Название функции, которое указывается в SQL-инструкции.
callback
Callback-функция для обработки пользовательской SQL-функции.
SQLite поддерживает только значения скалярных типов,
поэтому возврат из callback-функций значений других типов вызовет ошибку.
Корректная сигнатура функции обратного вызова:
mixedcallbackmixedvaluemixedvaluesvalue
Первый аргумент SQL-функции.
values
Дополнительные аргументы SQL-функции.
num_args
Количество аргументов, которое принимает SQL-функция.
При установке значения -1 SQL-функция
примет произвольное количество аргументов.
flags
Битовая маска флагов.
Метод пока поддерживает только флаг Pdo\Sqlite::DETERMINISTIC,
который указывает, что функция возвращает один и тот же результат
при одинаковых входных данных в рамках одной SQL-инструкции.
&reftitle.returnvalues;
&return.success;
&reftitle.examples;
Пример регистрации пользовательской SQL-функции методом Pdo\Sqlite::createFunction
В примере функция вычисляет дайджест строки по алгоритму SHA256, а затем инвертирует хеш.
При выполнении SQL-инструкции БД возвращает результат,
в котором пользовательская функция преобразовала каждое название файла.
Данные, которые возвращаются в переменной $rows,
содержат результат обработки.
Преимущество подхода состоит в автоматической обработке запроса пользовательской функцией
вместо постобработки результата в цикле &foreach;.
createFunction('sha256rev', 'sha256_and_reverse', 1);
$rows = $db->query('SELECT sha256rev(filename) FROM files')->fetchAll();
]]>
&reftitle.seealso;
Pdo\Sqlite::createAggregatePdo\Sqlite::createCollationsqlite_create_functionsqlite_create_aggregate