Imaginons une table d'une base de données où on stockerait la configuration d'une application. Cette table pourrait avoir la structure suivante :
create table config (
param varchar(255) not null default '',
value text
comment varchar(255) defautl null
)
Pour mettre à jour, une clé de configuration de cette table il faut vérifier si la clé existe ou non pour créer ou mettre à jour l'enregistrement dans la base. Avec MySQL, on peut résoudre ce problème en utilisant la commande REPLACE mais cette commande n'est pas dans le standard SQL. Donc si on veut que cette requête fonctionne avec des moteurs de base de données plus proche du standard, on est obligé de faire deux requête : une pour tester l'existence et une autre pour mettre à jour ou insérer.
Plutôt que d'avoir un code comme le suivant :
$query = 'SELECT param,value FROM '.CONFIG_TABLE.' WHERE param =\''.$param.'\';';
$params = array_from_query($query, 'param');
if (count($params) == 0) {
$query = 'INSERT INTO '.CONFIG_TABLE.' (param, value) VALUES(\''.$param.'\', \''.$value.'\');';
pwg_query($query);
} else {
$query = 'UPDATE '.CONFIG_TABLE.' SET value =\''.$value.'\' WHERE param =\''.$param.'\';';
pwg_query($query);
}
En utilisant Doctrine (par exemple)l suffit d'écrire quelque chose comme :
$conf = new Conf();
$conf->param = $param;
$conf->value = $value;
$conf->save();