(PHP 5 >= 5.1.0, PHP 7, PHP 8, PECL pdo_sqlite >= 1.0.0)
PDO::sqliteCreateFunction — Регистрация пользовательской функции для использования в SQL-запросах
$function_name
,$callback
,$num_args
= -1,$flags
= 0Это ЭКСПЕРИМЕНТАЛЬНАЯ функция. Не исключается, что поведение, название и документацию функции изменят без уведомления в следующих версиях 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(hash('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.