Pdo\Sqlite::createFunction

(PHP 8 >= 8.4.0)

Pdo\Sqlite::createFunction Регистрирует пользовательскую функцию для вызова в SQL-инструкциях

Описание

public Pdo\Sqlite::createFunction(
    string $function_name,
    callable $callback,
    int $num_args = -1,
    int $flags = 0
): bool

Метод регистрирует пользовательскую PHP-функцию в SQLite для вызова в SQL-инструкциях. Пользовательскую функцию вызывают в триггерах или SQL-запросах наподобие SELECT, UPDATE или других предложениях с поддержкой вызова функций.

Подсказка

При совпадении названий метод переопределит встроенную SQL-функцию.

Список параметров

function_name
Название функции, которое указывается в SQL-инструкции.
callback
Callback-функция для обработки пользовательской SQL-функции.

Замечание: SQLite поддерживает только значения скалярных типов, поэтому возврат из callback-функций значений других типов вызовет ошибку.

Корректная сигнатура функции обратного вызова:

callback(mixed $value, mixed ...$values): mixed
value

Первый аргумент SQL-функции.

values

Дополнительные аргументы SQL-функции.

num_args
Количество аргументов, которое принимает SQL-функция. При установке значения -1 SQL-функция примет произвольное количество аргументов.
flags
Битовая маска флагов. Метод пока поддерживает только флаг Pdo\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();

Смотрите также

  • Pdo\Sqlite::createAggregate() - Регистрирует агрегирующую пользовательскую функцию для использования в SQL-выражениях
  • Pdo\Sqlite::createCollation() - Регистрирует определяемую пользователем функцию для использования в качестве функции сопоставления в SQL-выражениях
  • sqlite_create_function()
  • sqlite_create_aggregate()
Добавить

Примечания пользователей

Пользователи ещё не добавляли примечания для страницы
To Top