UPDATE
permet de mettre à jour les données d’une table d’une base de données MySQL, PostgreSQL, etc.
Cette commande nous permet donc de modifier les données stockées dans une table en remplaçant d’anciennes données par de nouvelles.
La mise à jour de données dans une base de données est l’une des opérations de base et des plus courantes qu’on va effectuer lors de la manipulation des données des bases de données au même titre que la sélection avec la commande SQL SELECT
ou l’insertion avec SQL INSERT
.
SQL UPDATE
va nous permettre de mettre à jour les données relatives à une ou plusieurs entrées d’un coup dans une base de données. Nous utiliserons souvent cette commande avec WHERE
pour ne mettre à jour que les entrées qui correspondent à un certain critère.
Syntaxe de la commande SQL UPDATE
La commande SQL UPDATE
permet de mettre à jour, c’est-à-dire de modifier les informations contenues dans une table d’une base de données.
Nous allons pouvoir utiliser cette commande pour mettre à jour les valeurs de toutes les entrées pour une ou plusieurs colonnes ou pour ne mettre à jour que les valeurs de certaines entrées répondant à un critère défini par une clause WHERE
.
Mettre à jour les valeurs de toutes les entrées pour une ou plusieurs colonnes
Pour commencer, nous allons pouvoir utiliser la commande SQL UPDATE
pour mettre à jour les valeurs de toutes les entrées pour une ou plusieurs colonnes.
Dans ce cas, nous utiliserons la syntaxe UPDATE nom_de_table SET nom_colonne = 'nouvelle valeur’
pour mettre à jour les valeurs de toutes les entrées de la table “nom_de_table” pour la colonne “nom_colonne” ou la syntaxe UPDATE nom_de_table SET nom_colonne1 = 'nouvelle valeur 1’, nom_colonne2 = 'nouvelle valeur 2’
pour mettre à jour les valeurs de toutes les entrées pour les colonnes “nom_colonne1” et “nom_colonne2”.
Mettre à jour les valeurs d’une ou de certaines entrées pour une ou plusieurs colonnes avec SQL UPDATE et WHERE
Souvent, nous ne voudrons mettre à jour que les valeurs d’une ou de certaines entrées de notre table répondant à un certain critère. Dans ce cas, nous allons utiliser la commande SQL UPDATE
avec une clause WHERE
.
Nous allons donc utiliser la syntaxe suivante : UPDATE nom_de_table SET nom_colonne = 'nouvelle valeur’ WHERE condition
.
Pour mettre à jour les valeurs d’une seule entrée, par exemple, on pourra se servir de la colonne id
de la table si celle-ci en contient une en précisant UPDATE nom_de_table SET nom_colonne = 'nouvelle valeur’ WHERE id = nombre
.
Exemples d’utilisation de SQL UPDATE
Pour tester la commande SQL UPDATE
, nous allons avoir besoin d’une base de données avec une table au moins.
Il existe différentes méthodes créer une base de données et une table. Les deux plus courantes sont l’utilisation de phpMyAdmin ou d’un script PHP avec une extension mysql ou PDO.
Ici, nous allons créer une base MySQL cours
contenant une table users
. Je vous invite donc à démarrer vos serveurs (en utilisant MAMP, WAMP, etc.) et à aller dans votre phpMyAdmin (accessible depuis la page de démarrage de WAMP, MAMP…).
Créez ensuite la base cours
en allant dans l’onglet “base de données” puis dans le champ “créer un base”. Sélectionnez finalement la base en cliquant dessus puis allez dans l’onglet “import” pour importer la table users
que je vous ai préparée et que vous pouvez télécharger en cliquant ici.
Cette table users
contient 6 colonnes et huit champs comme sur l’image ci-dessous :
Mise à jour de données via phpMyAdmin
Commençons par essayer de modifier les valeurs des entrées de notre table avec phpMyAdmin. Pour cela, commençons par sélectionner notre table “users” dans phpMyAdmin puis par nous rendre dans l’onglet “SQL”.
A partir de là, on va pouvoir par exemple modifier la valeur de la colonne “age” pour toutes les entrées avec la requête UPDATE users SET age = 30
comme ceci :
On va également pouvoir mettre à jour des valeurs uniquement pour certaines entrées avec une clause WHERE
. On peut par exemple changer la valeur de la colonne “prenom” pour l’entrée qui possède l’id = 1 en écrivant :
On va également pouvoir mettre à jour les valeurs de plusieurs colonnes d’un coup pour une, certaines ou pour toutes les entrées de notre table. Pour cela, il suffit de séparer les colonnes par une virgule. La syntaxe est alors la suivante :
Mise à jour de données avec PHP et l’extension PDO
Bien souvent, nous voudrons mettre à jour les données en base de données de façon dynamique. On peut par exemple laisser la possibilité aux gens inscrits sur notre site de modifier leurs données personnelles. Pour réaliser cela, nous n’allons pas pouvoir passer par phpMyAdmin mais devrons plutôt utiliser un langage de script serveur comme le PHP.
Pour communiquer avec les bases de données, nous allons pouvoir utiliser l’une des deux extensions PHP mysql ou PDO. Dans ce tutoriel, j’utiliserai PDO.
Commençons par créer un fichier update.php
. Ce fichier va contenir le code PHP pour se connecter à la base de données cours
et pour mettre à jour les données dans notre table users
.
Pour mettre à jour les données, nous allons ici utiliser les requêtes préparées et donc les fonctions prepare()
er execute()
.
Nous allons également ici utiliser la fonction bindParam()
avec des marqueurs nommés comme ceci :
<!DOCTYPE html> <html> <head> <title>Cours PHP / MySQL</title> <meta charset='utf-8'> </head> <body> <h1>Bases de données MySQL</h1> <?php $servname = "localhost"; $dbname = "cours"; $user = "root"; $pass = "root"; try{ $dbco = new PDO("mysql:host=$servname;dbname=$dbname", $user, $pass); $dbco->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $age = 31; $req = $dbco->prepare("UPDATE users SET age = :age"); $req->bindParam(':age', $age, PDO::PARAM_INT); $req->execute(); echo 'Données mises à jour'; } catch(PDOException $e){ echo "Erreur : " . $e->getMessage(); } ?> </body> </html>
Ce script permet d’établir une connexion avec notre base de données MySQL et de mettre à jour les valeurs de la colonne “age” pour toutes les entrées de la table.
On utilise ici un marqueur nommé :age
dans notre requête puis on relie ce paramètre à une variable $age
. On passe également un drapeau PDO::PARAM_INT
pour signifier qu’on attend un entier en valeur.
Mise en garde sur l’utilisation de la commande SQL UPDATE
Il convient de toujours faire bien attention lorsqu’on manipule les données d’une base de données car la plupart des manipulations sont permanentes et donc non réversibles.
En particulier, lorsqu’on utilise une commande SQL UPDATE
, il faut porter une attention particulière à la clause WHERE
qui l’accompagne souvent. Si on omet cette clause WHERE
, toutes les entrées de la table seront mises à jour, ce qui n’est généralement pas le comportement voulu.