(PHP 5 >= 5.1.0, PHP 7, PHP 8, PECL pdo_sqlite >= 1.0.0)
PDO::sqliteCreateFunction — Registra una función definida por el usuario para utilizarla en sentencias SQL
$function_name
, callable $callback
, int $num_args
= ?): boolEsta función ha sido declarada EXPERIMENTAL. Su funcionamiento, nombre y la documentación que le acompaña puede cambiar sin previo aviso en futuras versiones de PHP. Utilícela bajo su propia responsabilidad.
Este método permite registrar una función de PHP con SQLite como una FDU (Función Definida por el Usuario), y así poder invocarla desde dentro de sentencias SQL.
LA FDU se puede usar en cualquier sentencia SQL que pueda invocar funciones, tales como SELECT y UPDATE, y también en disparadores.
function_name
El nombre de la función usada en sentencias SQL.
callback
Una función de llamada de retorno para manejar la función SQL definida.
Nota: Las funciones de llamada de retorno deberían devolver un tipo comprendido por SQLite (esto es, del tipo escalar).
num_args
Una sugerencia para el analizador de SQLite si la función de llamada de retorno acepta un número predeterminado de argumentos.
Ejemplo #1 Ejemplo de PDO::sqliteCreateFunction()
<?php
function md5_e_invertir($string)
{
return strrev(md5($string));
}
$bd = new PDO('sqlite:sqlitedb');
$bd->sqliteCreateFunction('md5rev', 'md5_e_invertir', 1);
$filas = $bd->query('SELECT md5rev(filename) FROM files')->fetchAll();
?>
En este ejemplo, se tiene una función que calcula la suma md5 de una
cadena, y luego la inverte. Cuando se ejecuta la sentencia SQL,
devuelve el valor del nombre del fichero transformado por dicha función. Los datos
devueltos en $filas
contienen el resultado procesado.
La belleza de esta técnica consiste en que no se necesario procesar el resultado usando un bucle foreach después de haber consultado los datos.
Se puede usar PDO::sqliteCreateFunction y PDO::sqliteCreateAggregate para invalidar funciones SQL nativas de SQLite.
Nota:
Este método no está disponible con el controlador SQLite2. Use la API de sqlite de estilo antiguo en su lugar.