Stocker un ensemble de variables scalaires en PHP

jeudi 8 février 2007.
 

Stocker un ensemble de variables dans un container

Sans passer par de la programmation objet, PHP ne posséde pas de structure de données aussi élégante que le C ou le Cobol. Foin de l’élégance, soyons efficace, cela suffira. Nous allons réduire un ensemble de variables, scalaires, en une structure unique, plus facile à stocker, typiquement dans une base de données. Cela est réalisé par une opération appellée "sérialisation". voir http://fr.php.net/manual/fr/function.serialize.php


/* Soit un ensemble de variables. */
$var1 = 'azerty';
$var2 = 123.456;
$var3 = 'uiop';

/* Serialisation */
$container = serialize(array(
   'var1' => $var1,
   'var2' => $var2,
   'var3' => $var3 );

/* Préparation pour stockage en base de données */
if (! get_magic_quotes_gpc()) {
   $container = addslashes($container);
}

Récupérer un ensemble de valeur stockée dans un container

Le container est le résultat de la sérialisation d’un lot de variable scalaire. La fonction de sérialisation PHP est complétée, bien entendu, par une fonction inverse de "désérialisation", unserialize(). L’ordre des opérations est l’inverse de celui de la sérialisation, et la mise en tableau est remplacée par la function extract() , qui , à partir d’un tableau associatif , va réaliser l’opération inverse.


/* Suppression d'eventuelles séquelles de la lecture de la base de donnees */
if (! get_magic_quotes_gpc()) {
   $container = stripslashes($container);
}
/* Deserialisation, et importation des variables du tableau vers la table des symboles */
extract(unserialize($container));

POO

POO == Programmation Orientée Objet. Il est vrai que cette solution par serialisation manque cruellement d’élégance, et, surtout, manque d’efficacité. Il conviendrait plutôt d’utiliser un objet (une classe), mais ceci est une autre histoire, que l’on verra, peut être, une autre fois. ;o]

Stockage du container en base de données

Suivant la base de données, la gestion des simples quotes, guillement, barre obliques (slashe et antislashe), il se peut que les fonctions addslashes() et stripslashes() ne soient pas les fonctions optimums.

Par exemple, avec MySql, il convient d’utiliser mysql_real_escape(). Mais, cela est dangereux en cas d’évolution de votre application.

Donc, utilisez plutôt les fonctions liées à PDO http://fr.php.net/manual/fr/ref.pdo.php, telle pdo_quote() http://fr.php.net/manual/fr/function.PDO-quote.php

Il existe aussi la fonction addCslashes() http://fr.php.net/manual/fr/function.addcslashes.php , qui prend 2 paramètres, la chaîne à traiter, et la liste des caractères qui vont bénéficier d’un échappement. Elle m’a été fort utile pour adjoindre un antislashe à d’éventuelles double quotes (") à une chaîne contenue dans une variable PHP, qui aller être placée comme paramètre à la fonction JavaScript write()



Forum