8.124 Fonctions SQLite
8 Référence des fonctions
Manuel PHP
. Introduction . Installation . Pré-requis . Types de ressources . Constantes pré-définies . Classes pré-définies . Configuration à l'exécution . sqlite_array_query . sqlite_busy_timeout . sqlite_changes . sqlite_close . sqlite_column ->sqlite_create_aggregate . sqlite_create_function . sqlite_current . sqlite_error_string . sqlite_escape_string . sqlite_exec . sqlite_factory . sqlite_fetch_all . sqlite_fetch_array . sqlite_fetch_column_types . sqlite_fetch_object . sqlite_fetch_single . sqlite_fetch_string . sqlite_field_name . sqlite_has_more . sqlite_has_prev . sqlite_key . sqlite_last_error . sqlite_last_insert_rowid . sqlite_libencoding . sqlite_libversion . sqlite_next . sqlite_num_fields . sqlite_num_rows . sqlite_open . sqlite_popen . sqlite_prev . sqlite_query . sqlite_rewind . sqlite_seek . sqlite_single_query . sqlite_udf_decode_binary . sqlite_udf_encode_binary . sqlite_unbuffered_query . sqlite_valid
|
8.124.13 sqlite_create_aggregate()SQLiteDatabase->createAggregate()Enregistre une UDF agregeante pour les requêtes SQLite[ Exemples avec sqlite_create_aggregate ] PHP 5
void
sqlite_create_aggregate (
resource
dbhandle
,
string
function_name
,
callback
step_func
,
callback
finalize_func
,
int
num_args
)
Style orienté objet (méthode)
SQLiteDatabase
void
createAggregate (
string
function_name
,
callback
step_func
,
callback
finalize_func
,
int
num_args
)
sqlite_create_aggregate
est similaire à
sqlite_create_function
, car elle enregistre une
fonction qui sera utilisée pour calculer un résultat agrégé sur plusieurs
lignes d'une requête.
La différence principale entre cette fonction et
sqlite_create_function
est que deux fonctions sont nécessaires
pour gérer les agrégations :
step_func
est
appelée pour chaque ligne du résultat. Votre fonction PHP doit accumuler
le résultat, et le stocker dans le contexte d'agrégation.
Une fois que toutes les lignes ont été appelées,
finalize_func
sera appelée, et elle doit alors
lire les données dans ce contexte d'agrégation, et en retourner le résultat.
Les fonctions de callback doivent retourner un type compréhensible par SQLite (i.e.
type scalaire ).
-
dbhandle
-
La ressource de base de données SQLite; retournée par
sqlite_open
lorsqu'utilisée de manière
procédurale. Ce paramètre n'est pas requis si vous utilisez la méthode
orientée objet.
-
function_name
-
Le nom de la fonction utilisée dans les requêtes SQL.
-
step_func
-
Fonction de procédure de rappel appelée pour chaque ligne du jeu de
résultats.
-
finalize_func
-
Fonction de procédure de rappel pour le contexte d'agrégation des
données de chaque ligne.
-
num_args
-
Conseil à l'analyseur SQLite si la fonction de procédure de rappel
accepte un nombre prédéterminé d'arguments.
| Exemple d'UDF SQLite : taille maximale de chaîne |
<?php $data = array( 'one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight', 'nine', 'ten' ); $db = sqlite_open(':memory:'); sqlite_query($db, "CREATE TABLE strings(a)"); foreach ($data as $str) { $str = sqlite_escape_string($str); sqlite_query($db, "INSERT INTO strings VALUES('$str')"); }
function max_len_step(&$context, $string) { if (strlen($string) > $context) { $context = strlen($string); } }
function max_len_finalize(&$context) { return $context; }
sqlite_create_aggregate($db, 'max_len', 'max_len_step', 'max_len_finalize');
var_dump(sqlite_array_query($db, 'SELECT max_len(a) from strings'));
?>
|
Dans cet exemple, nous créons une fonction d'agrégation qui va calculer
la taille de la plus longue chaîne dans l'une des colonnes de la table.
Pour chaque ligne, la fonction
max_len_step
est appelée, et reçoit le paramètre
context
. Le contexte
est une autre variable PHP, et il peut contenir un tableau ou même un objet.
Dans notre exemple, nous l'utilisons pour stocker la taille maximale
de la colonne courante. Si
string
est plus grand
que la valeur maximale que nous avons enregistrée, nous modifions notre
contexte en conséquence.
Une fois que toutes les lignes ont été traitées, SQLite appelle la fonction
max_len_finalize
pour déterminer le résultat de
l'agrégation. Nous pourrions alors effectuer plusieurs calculs en fonction
des données que nous avons récoltées dans
context
.
Dans notre exemple simple,
nous avons calculé le résultat au fur et à mesure de la progression de la requête,
ce qui nous permet de n'avoir qu'à retourner la valeur de notre contexte.
| Note | |
L'exemple ci-dessus ne fonctionnera pas correctement si
une colonne contient une donnée binaire. Reportez-vous à la fonction
sqlite_udf_decode_binary
pour plus de détails, et d'un
exemple pour travailler avec des chaînes binaires.
|
Array
Array
|