(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_namecallbackЗамечание: SQLite поддерживает только значения скалярных типов, поэтому возврат из callback-функций значений других типов вызовет ошибку.
Корректная сигнатура функции обратного вызова:
valueПервый аргумент SQL-функции.
valuesДополнительные аргументы SQL-функции.
num_args-1 SQL-функция
примет произвольное количество аргументов.
flagsPdo\Sqlite::DETERMINISTIC,
который указывает, что функция возвращает один и тот же результат
при одинаковых входных данных в рамках одной SQL-инструкции.
Функция возвращает true, если выполнилась успешно, или false, если возникла ошибка.
Пример #1 Пример регистрации пользовательской SQL-функции методом 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->createFunction('sha256rev', 'sha256_and_reverse', 1);
$rows = $db->query('SELECT sha256rev(filename) FROM files')->fetchAll();