(PHP 8 >= 8.4.0)
Pdo\Sqlite::createFunction — Регистрирует определяемую пользователем функцию для использования в SQL-выражениях
$function_name
,$callback
,$num_args
= -1,$flags
= 0
Метод позволяет зарегистрировать PHP-функцию в SQLite как пользовательскую функцию,
чтобы её можно было вызывать в SQL-выражениях.
Определённая функция может быть использована в любом SQL-запросе,
допускающем вызов функции, например SELECT
, UPDATE
или триггерах.
С помощью метода можно переопределить встроенные SQL-функции.
function_name
callback
Замечание: Callback-функции должны возвращать тип, понятный SQLite (например, скалярный тип).
Сигнатура функции должна быть определена как:
value
Первый аргумент, передаваемый SQL-функции.
values
Дополнительные аргументы, передаваемые SQL-функции.
num_args
-1
, то SQL-функция
может принимать любое количество аргументов.
flags
Pdo\Sqlite::DETERMINISTIC
,
который указывает, что функция всегда возвращает один и тот же результат
при одинаковых входных данных в рамках одного SQL-выражения.
Функция возвращает true
, если выполнилась успешно, или false
, если возникла ошибка.
Пример #1 Пример использования метода Pdo\Sqlite::createFunction()
В этом примере функция вычисляет сумму SHA256 строки, а затем меняет её на противоположную. При выполнении SQL-выражения она возвращает значение имени файла, преобразованного функцией. Данные, возвращаемые в переменную $rows, содержат обработанный результат.
Прелесть техники в том, что после выполнения запроса
не нужно обрабатывать результат с помощью цикла foreach
.
<?php
function sha256_and_reverse($string)
{
return strrev(hash('sha256', $string));
}
$db = new Pdo\Sqlite('sqlite::sqlitedb');
$db->sqliteCreateFunction('sha256rev', 'sha256_and_reverse', 1);
$rows = $db->query('SELECT sha256rev(filename) FROM files')->fetchAll();
?>