(PHP 5 >= 5.1.0, PHP 7, PHP 8, PECL pdo_sqlite >= 1.0.0)
PDO::sqliteCreateFunction — Registra uma Função Definida pelo Usuário para uso em declarações SQL
$function_name
,$callback
,$num_args
= -1,$flags
= 0Esta função é EXPERIMENTAL. O comportamento desta função, seu nome e documentação poderão mudar sem aviso prévio em futuras versões do PHP. Use por sua conta e risco.
Este método permite registrar uma função PHP com o SQLite como uma UDF (Função Definida pelo Usuário), para que possa ser chamada a partir das declarações SQL.
A UDF pode ser usada em qualquer declaração SQL que possa chamar funções, como declarações SELECT e UPDATE e também em triggers.
function_name
O nome da função usada nas declarações SQL.
callback
Função de retorno para tratar a função SQL definida.
Nota: A função de retorno deve retornar um tipo reconhecido pelo SQLite (ou seja, um tipo escalar).
Esta função precisa ser definida como:
value
O primeiro argumento passado para a função SQL.
values
Argumentos adicionais passados para a função SQL.
num_args
O número de argumentos que a função SQL utiliza.
Se este parâmetro for -1
, então a função SQL poderá
receber qualquer número de argumentos.
flags
Uma conjunção bit a bit de flags.
Atualmente, apenas PDO::SQLITE_DETERMINISTIC
é
suportada, o que especifica que a função sempre retorna o mesmo resultado
dadas as mesmas entradas em uma única instrução SQL.
Versão | Descrição |
---|---|
7.1.4 |
O parâmetro flags foi adicionado.
|
Exemplo #1 Exemplo de 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();
?>
Neste exemplo, existe uma função que calcula a soma md5 de uma string e
depois a inverte. Quando a instrução SQL é executada, ela
retorna o valor do nome do arquivo transformado pela função. Os dados
retornados em $rows
contêm o resultado processado.
A elegância desta técnica é que não existe necessidade de processar o resultado usando um laço foreach após os dados terem sido consultados.
PDO::sqliteCreateFunction e PDO::sqliteCreateAggregate podem ser usados para substituir funções SQL nativas do SQLite.