Magazine Internet

PHP : Stocker sa configuration dans une base de données

Publié le 23 juin 2009 par Methylbro

Stocker ses variable de configuration PHP dans une Base de DonnéesNous venons de voir dans un billet précédant comment manipuler facilement des variables de configuration à l'aide d'un fichier .ini. Mais comme je l'ai expliqué dans le billet d'introduction à ce sujet, dans certains cas nous pourrions très bien vouloir stocker autrement ces informations.

Aujourd'hui nous allons voir comment, avec la même méthodologie, avec les mêmes classes et interfaces de base nous pouvons étendre notre petite librairie à l'utilisation de base de données.

La classe DataBase_ConfigurationHandler

Pour ce faire, il faudra indiquer à la classe Configuration comment elle doit lire et enregistrer les informations qu'elle manipule.

Il suffit donc de reprendre la classe abstraite ConfigurationHandler au sein d'une nouvelle classe (que nous appellerons ici DataBase_ConfigurationHandler) et de lui implémenter également les méthodes de l'interface iConfigurationHandler.

On se retrouve donc avec un nouvel objet de type ConfigurationHandler capable de lire et d'écrire dans une base de données.

class DataBase_ConfigurationHandler extends ConfigurationHandler implements iConfigurationHandler {
private $column_name;
private $column_value;
private $table;
private $_PDO;
public function __construct($colname, $colvalue, $table, $PDO, $auto=false) {
parent::__construct($auto);
$this->column_name = $colname;
$this->column_value = $colvalue;
$this->table = $table;
$this->_PDO = $PDO;
}
public function load() {
$sql = "SELECT `".$this->column_name."`, `".$this->column_value."` "
. "FROM `".$this->table."`;";
$PDOStatement = $this->_PDO->query($sql);
while($row = $PDOStatement->fetch(PDO::FETCH_ASSOC)) {
$this->setData($row[$this->column_name], $this->column_value);
}
return $this;
}
public function save() {
$arr = array();
$sql = "TRUNCATE TABLE `".$this->table."`;";
$this->_PDO->exec($sql);
$sql = "INSERT INTO `".$this->table."` "
. "(`".$this->column_name."`, `".$this->column_value."`) VALUES ";
foreach($this->data as $name => $value) $arr[] = "('".$name."', '".$value."')";
$sql.= implode(', ', $arr);
$this->_PDO->exec($sql);
return $this;
}
}

La table CONFIGURATION

Dans un second temps nous allons créer une table simple au sein d'une base de données qui contiendra les valeurs de chaque variables de configuration que nous allons utiliser :

CREATE TABLE `CONFIGURATION` (
`name` varchar(255) NOT NULL,
`value` blob NULL,
PRIMARY KEY (`name`)
)TYPE=MyISAM;
INSERT INTO `CONFIGURATION` (`name`, `value`) VALUES ('bonjour', 'hello world !'), ('foo', 'bar');

Exemple d'utilisation

Pour finir il ne reste plus qu'a utiliser notre nouvelle classe. Rien de plus simple car grâce au l'interface iConfigurationHandler c'est toujours les mêmes méthodes que l'on utilise.

$PDO = new PDO();
$maMethode = new DataBase_ConfigurationHandler('name', 'value', 'CONFIGURATION', $PDO);
$maConfiguration = new Configuration($maMethode);
echo $maConfiguration->bonjour;
/*
* Affichera :
* hello world !
*/
echo $maConfiguration->foo;
/*
* Affichera :
* bar
*/
$maConfiguration->bonjour = 'coucou !';
$maMethode->save();


Retour à La Une de Logo Paperblog

A propos de l’auteur


Methylbro 17 partages Voir son blog

l'auteur n'a pas encore renseigné son compte l'auteur n'a pas encore renseigné son compte