UPDATE : modifier des données



Vous venez de rajouter « Battlefield » dans la BDD et tout s'est bien passé.
Mais… vous vous rendez compte avec stupeur que « Battlefield » se joue en fait à 32 joueurs maximum (au lieu de 50) et qu'en plus son prix a baissé : on le trouve à 10 euros (au lieu de 45).


La requête UPDATE permet de modifier une entrée



No problemo amigo !
Avec une petite requête SQL, on peut arranger ça. En effet, en utilisant UPDATE vous allez pouvoir modifier l'entrée qui pose problème :

Code : PHP

1

UPDATE jeux_video SET prix = 10, nbre_joueurs_max = 32 WHERE ID = 51



Comment ça marche ?

  • Tout d'abord, le mot-clé UPDATE permet de dire qu'on va modifier une entrée.
  • Ensuite, le nom de la table (jeux_video).
  • Le mot-clé SET, qui sépare le nom de la table de la liste des champs à modifier.
  • Viennent ensuite les champs qu'il faut modifier, séparés par des virgules. Ici, on modifie le champ « prix », on lui affecte la valeur « 10 » (prix = 10), puis on fait de même pour le champ nbre_joueurs_max. Les autres champs ne seront pas modifiés.
  • Enfin, le mot-clé WHERE est tout simplement indispensable. Il nous permet de dire à MySQL quelle entrée il doit modifier (sinon, toutes les entrées seraient affectées !). On se base très souvent sur le champ ID pour indiquer quelle entrée doit être modifiée. Ici, on suppose que « Battlefield » a été enregistré sous l'ID no 51.

Si vous voulez, vous pouvez vous baser sur le nom du jeu au lieu de l'ID pour effectuer votre sélection :

Code : PHP 

1

UPDATE jeux_video SET prix = '10', nbre_joueurs_max = '32' WHERE nom = 'Battlefield 1942'



Dernière minute ! Florent vient de racheter tous les jeux de Michel. Il va falloir modifier ça tout de suite.

Euh, il va falloir modifier chaque entrée une à une ?



Non ! Il n'est pas question de passer des heures à modifier chaque entrée une à une pour ça ! En réfléchissant environ 0,5 seconde, vous allez trouver tout seuls la requête SQL qui permet de faire ce qu'on souhaite.

C'est bon, vous avez trouvé ? Allez, je vous donne la réponse dans le mille :

Code : PHP 

1

UPDATE jeux_video SET possesseur = 'Florent' WHERE possesseur = 'Michel'



Traduction : « Dans la table jeux_video, modifier toutes les entrées dont le champ possesseur est égal à Michel, et le remplacer par Florent. »

Qu'il y ait 1, 10, 100 ou 1 000 entrées, cette requête à elle seule suffit pour mettre à jour toute la table ! Si c'est pas beau, le SQL… ;-) 


Application en PHP



De la même manière, en PHP on fait appel à exec() pour effectuer des modifications :

Code : PHP 

1

2

3

<?php

$bdd->exec('UPDATE jeux_video SET prix = 10, nbre_joueurs_max = 32 WHERE nom = \'Battlefield 1942\'');

?>



Notez que cet appel renvoie le nombre de lignes modifiées. Essayez de récupérer cette valeur dans une variable et de l'afficher, par exemple comme ceci :

Code : PHP 

1

2

3

4

<?php

$nb_modifs = $bdd->exec('UPDATE jeux_video SET possesseur = \'Florent\' WHERE possesseur = \'Michel\'');

echo $nb_modifs . ' entrées ont été modifiées !';

?>



Cela affichera quelque chose comme : 13 entrées ont été modifiées !


Avec une requête préparée



Si vous insérez des données variables, par exemple envoyées par l'utilisateur, je vous recommande là encore de faire appel à une requête préparée :

Code : PHP

1

2

3

4

5

6

7

8

<?php

$req = $bdd->prepare('UPDATE jeux_video SET prix = :nvprix, nbre_joueurs_max = :nv_nb_joueurs WHERE nom = :nom_jeu');

$req->execute(array(

       'nvprix' => $nvprix,

       'nv_nb_joueurs' => $nv_nb_joueurs,

       'nom_jeu' => $nom_jeu

       ));

?>

Créé avec HelpNDoc Personal Edition: Prenez en charge sans effort vos applications Windows avec la génération CHM de HelpNDoc