ScotlandPHP

PDO::sqliteCreateFunction

(PHP 5 >= 5.1.0, PHP 7, PECL pdo_sqlite >= 1.0.0)

PDO::sqliteCreateFunction Регистрация пользовательской функции для использования в SQL-запросах

Описание

public bool PDO::sqliteCreateFunction ( string $function_name , callable $callback [, int $num_args = -1 [, int $flags = 0 ]] )
Внимание

Эта функция является ЭКСПЕРИМЕНТАЛЬНОЙ. Поведение этой функции, ее имя и относящаяся к ней документация могут измениться в последующих версиях PHP без уведомления. Используйте эту функцию на свой страх и риск.

Этот метод позволяет вам регистрировать функцию PHP как пользовательскую функцию SQLite (User Defined Function или UDF), что позволит использовать ее в SQL-запросах.

UDF можно использовать в любом SQL-запросе, в котором позволяется использовать функции, например SELECT, UPDATE, а так же в триггерах.

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

function_name

Имя функции для использовании в запросах.

callback

Функция обратного вызова для обработки вызовов SQL-функции.

Замечание: Функция обратного вызова должна возвращать значение понятного SQLite типа (т.е. скалярного типа).

num_args

Количество аргументов, которое принимает функция. Если задать равным -1, то функция будет принимать любое количество аргументов.

flags

Побитовая конъюнкция (ИЛИ) флагов. На данный момент поддерживается только флаг PDO::SQLITE_DETERMINISTIC, который определяет то, что функция всегда возвращает одинаковый результат для одинаковых входных значений.

Возвращаемые значения

Возвращает TRUE в случае успешного завершения или FALSE в случае возникновения ошибки.

Список изменений

Версия Описание
PHP 7.1.4 Добавлен параметр flags.

Примеры

Пример #1 Пример использования PDO::sqliteCreateFunction()

<?php
function md5_and_reverse($string
{
    return 
strrev(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.

Замечание:

Этот метод недоступен с драйвером SQLite2. В этом случае используйте старое sqlite API.

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

add a note add a note

User Contributed Notes 1 note

up
1
RoboTamer
5 years ago
groups looks like this '1,2,3,999'

<?php
/**
* int strpos ( string $haystack , mixed $needle [, int $offset = 0 ] )
*/
$dbUser = new PDO('sqlite:'.ROOT.'/var/db/users.db3');
$dbUser->sqliteCreateFunction('strpos', 'strpos', 2);
$sql = 'SELECT username FROM users WHERE strpos(groups,",2,");';
$rows = $dbUser->query($sql)->fetchAll(PDO::FETCH_ASSOC);
print_r($rows);

?>
To Top