Dans le billet d'introduction (qu'il est préférable d'avoir lu avant d'aborder ce billet) nous avons vu comment effectuer des requêtes avec la fonction select() de dbLayer. Après avoir découvert comment lire les enregistrements dans la base de données, nous allons ici voir comment insérer, mettre à jour et effacer des enregistrements.

Voici pour rappel la table des lecteurs que nous avons utilisé comme exemple dans le billet d'introduction :

La table lecteurs

lecteurs
idnomrole
1Pierreclown
2Pauldéveloppeur
3Jacquessoutien moral
4Olivierchef
5Kozlikafée

Le curseur

Pour insérer ou mettre à jour un enregistrement avec dbLayer, il faut d'abord ouvrir un curseur. Cela se fait avec la commande openCursor() et permet de définir sur quelle table on va agir. Ici ce sera la table lecteurs.

Ouvrons un curseur :

$cur = $con->openCursor('lecteurs');

$cur est un cursor, ou curseur en français. Nous allons lui attribuer des variables qui correspondent aux colonnes de la table et des valeurs grâce à la syntaxe suivante :

$cur->variable = valeur;

Exemples :

Pour définir le nom :

$cur->nom = 'César';

Pour définir le rôle :

$cur->role = 'empereur';

Insérer un enregistrement avec la fonction insert()

Un nouveau lecteur est arrivé, il s'appelle Hector et son rôle est "évangéliste". Comment faire pour l'ajouter à la table des lecteurs ? On ouvre un curseur, on lui attribue des valeurs :

$cur = $con->openCursor('lecteurs');
$cur->nom = 'Hector';
$cur->role = 'évangéliste';

Ensuite on utilise la fonction insert(), elle va récupérer les variables et les valeurs pour les insérer dans la table :

$cur->insert();

Voici le code complet :

$cur = $con->openCursor('lecteurs');
$cur->nom = 'Hector';
$cur->role = 'évangéliste';
$cur->insert();

Et la table après l'insertion :

lecteurs
idnomrole
1Pierreclown
2Pauldéveloppeur
3Jacquessoutien moral
4Olivierchef
5Kozlikafée
6Hectorévangéliste

Un enregistrement a été créé. Notez que l'id de cet enregistrement vaut 6 car la base de données a été configurée pour incrémenter l'id à chaque nouvel enregistrement.

Modifier un enregistrement avec la fonction update()

Pierre n'est plus clown, il est devenu professeur. Comment mettre à jour l'enregistrement de la table qui le concerne ? On ouvre un curseur et on attribue les nouvelles valeurs :

$cur = $con->openCursor('lecteurs');
$cur->role = 'professeur';

Puis on utilise la fonction update(), Le mot-clé WHERE permet de définir quel enregistrement nous allons mettre à jour, ici on veut modifier l'enregistrement de Pierre donc nous allons sélectionner l'enregistrement où le nom est "Pierre" :

$cur->update('WHERE nom = \'Pierre\';');

Voici le code complet :

$cur = $con->openCursor('lecteurs');
$cur->role = 'professeur';
$cur->update('WHERE nom = \'Pierre\';');

Et le résultat :

lecteurs
idnomrole
1Pierreprofesseur
2Pauldéveloppeur
3Jacquessoutien moral
4Olivierchef
5Kozlikafée
6Hectorévangéliste

L'enregistrement a été mis à jour.

Effacer un enregistrement avec la fonction execute()

Il n'y a pas de fonction spéciale pour effacer un enregistrement, nous allons utiliser la commande execute() qui sert à exécuter des requêtes SQL.

Jacques n'est plus lecteur, Comment effacer l'enregistrement qui le concerne ? Voici la requête SQL qui va effacer l'enregistrement avec l'id 3 : DELETE FROM lecteurs WHERE id = 3;

On exécute la requête :

$query = 'DELETE FROM lecteurs WHERE id = 3;';
$con->execute($query);

Et la table devient :

lecteurs
idnomrole
1Pierreprofesseur
2Pauldéveloppeur
4Olivierchef
5Kozlikafée
6Hectorévangéliste

Notez qu'on aurait pu réaliser la même action avec cette requête SQL :

$query = 'DELETE FROM lecteurs WHERE nom = \'Jacques\';';

Quelques fonctions supplémentaires pour les recordsets

Ces fonctions permettent d'obtenir des informations sur les requêtes SELECT décrites dans le billet d'introduction.

isEmpty()

Cette fonction retourne true si un recordset est vide ou false sinon. Elle s'utilise dans une condition, pour voir si un recordset contient des enregistrements. Ici on va afficher les noms des lecteurs dont l'id est supérieur à 3 :

$query = 'SELECT nom FROM lecteurs WHERE id > 3;';
$rs = $con->select($query);

if ($rs->isEmpty())
{
	echo('aucun lecteur');
}
else
{
	while ($rs->fetch()) {echo($rs->f('nom').' ');}
}

Ce code affichera "aucun lecteur" si le recordset est vide et affichera les noms des lecteurs s'il y en a.

Pour ne pas afficher de message spécifique en cas de recordset vide on utilisera le code suivant :

$query = 'SELECT nom FROM lecteurs WHERE id > 3;';
$rs = $con->select($query);

if (!$rs->isEmpty())
{
	while ($rs->fetch()) {echo($rs->f('nom').' ');}
}

count()

Cette fonction retourne le nombre d'enregistrements présents dans un recordset :

$query = 'SELECT nom FROM lecteurs WHERE id > 3;';
$rs = $con->select($query);

echo('nombre d\'enregistrements : '.$rs->count());

Ceci affichera par exemple "nombre d'enregistrements : 2".

Conclusion

Grâce au billet précédent et à ce billet, vous savez lire et modifier des enregistrements dans des tables d'une base de données. Pour apprendre comment créer ou modifier des tables, voyez la documentation de Dotclear. Vous êtes prêts à gérer des tables dans une base de données avec Clearbricks.