INSERT : ajouter des données



Votre mission, si vous l'acceptez : ajouter une nouvelle entrée à la table « jeux_video » sur laquelle nous avons travaillé dans le chapitre précédent.

Mouahahahah, mais c'est facile. Tu utilises phpMyAdmin et hop ! c'est fait !
… Quoi, j'ai dit quelque chose de mal ?



Non, non.
C'est vrai que phpMyAdmin permet de rajouter de nouvelles entrées dans la table. Mais ce qui nous intéresse ici, c'est de le faire au moyen d'un script PHP et d'une requête SQL.

Tout d'abord, je vous rappelle à quoi ressemble la table « jeux_video » :

ID

nom

possesseur

console

prix

nbre_joueurs_max

commentaires

1

Super Mario Bros

Florent

NES

4

1

Un jeu d'anthologie !

2

Sonic

Patrick

Megadrive

2

1

Pour moi, le meilleur jeu au monde !

3

Zelda : ocarina of time

Florent

Nintendo 64

15

1

Un jeu grand, beau et complet comme on en voit rarement de nos jours

4

Mario Kart 64

Florent

Nintendo 64

25

4

Un excellent jeu de kart !

5

Super Smash Bros Melee

Michel

GameCube

55

4

Un jeu de baston délirant !

...

...

...

...

...

...

...




La requête INSERT INTO permet d'ajouter une entrée



Pour rajouter une entrée, vous aurez besoin de connaître la requête SQL. En voici une par exemple qui ajoute un jeu :

Code : PHP

INSERT INTO jeux_video(ID, nom, possesseur, console, prix, nbre_joueurs_max, commentaires) VALUES('', 'Battlefield 1942', 'Patrick', 'PC', 45, 50, '2nde guerre mondiale')


Les nombres (tels que 45 et 50 ici) n'ont pas besoin d'être entourés d'apostrophes. Seules les chaînes de caractères les nécessitent.



Étudions un peu cette requête.

  • D'abord, vous devez commencer par les mots-clés INSERT INTO qui indiquent que vous voulez insérer une entrée.
  • Vous précisez ensuite le nom de la table (ici jeux_video), puis listez entre parenthèses les noms des champs dans lesquels vous souhaitez placer des informations.
  • Enfin – et c'est là qu'il ne faut pas se tromper – vous inscrivez VALUES suivi des valeurs à insérer dans le même ordre que les champs que vous avez indiqués.

Vous remarquerez que pour le premier champ (ID), j'ai laissé des apostrophes vides. C'est voulu : le champ a la propriété auto_increment, MySQL mettra donc le numéro d'ID lui-même. On pourrait même se passer du champ ID dans la requête :

Code : PHP 

INSERT INTO jeux_video(nom, possesseur, console, prix, nbre_joueurs_max, commentaires) VALUES('Battlefield 1942', 'Patrick', 'PC', 45, 50, '2nde guerre mondiale')



C'est encore plus simple ! Le champ ID sera de toute façon automatiquement rempli par MySQL, il est donc inutile de le lister.

Enfin, si vous le désirez, sachez que vous n'êtes pas obligés de lister les noms des champs en premier ; cette requête marche tout aussi bien (mais elle est moins claire) :
Code : PHP 

INSERT INTO jeux_video VALUES('', 'Battlefield 1942', 'Patrick', 'PC', 45, 50, 

        '2nde guerre mondiale')


Il faut lister les valeurs pour tous les champs sans exception (ID compris) dans le bon ordre.




Application en PHP



Utilisons cette requête SQL au sein d'un script PHP. Cette fois, au lieu de faire appel à query() (que l'on utilisait dans le chapitre précédent pour récupérer des données), on va utiliser exec() qui est prévue pour exécuter des modifications sur la base de données :

Code : PHP 

<?php

try

{

       $bdd = new PDO('mysql:host=localhost;dbname=test', 'root', '');

}

catch(Exception $e)

{

        die('Erreur : '.$e->getMessage());

}

    

// On ajoute une entrée dans la table jeux_video

$bdd->exec('INSERT INTO jeux_video(nom, possesseur, console, prix, nbre_joueurs_max, commentaires) VALUES(\'Battlefield 1942\', \'Patrick\', \'PC\', 45, 50, \'2nde guerre mondiale\')');

      

echo 'Le jeu a bien été ajouté !';

?>



Que fait ce code ? Il ajoute une entrée dans la BDD pour le jeu « Battlefield 1942 », appartenant à « Patrick », qui fonctionne sur « PC », qui coûte 45 euros, etc.

La présence de multiples apostrophes rend la requête un peu difficile à lire et à écrire à cause des antislashs \ que l'on doit rajouter devant. De plus, cette requête insère toujours les mêmes données. Comme on l'a vu dans le chapitre précédent, si on veut rendre une partie de la requête variable, le plus rapide et le plus sûr est de faire appel aux requêtes préparées.


Insertion de données variables grâce à une requête préparée



Si on choisit d'utiliser une requête préparée (ce que je vous recommande si vous souhaitez insérer des variables), le fonctionnement est en fait exactement le même que dans le chapitre précédent :

Code : PHP

<?php

$req = $bdd->prepare('INSERT INTO jeux_video(nom, possesseur, console, prix, nbre_joueurs_max, commentaires) VALUES(:nom, :possesseur, :console, :prix, :nbre_joueurs_max, :commentaires)');

$req->execute(array(

       'nom' => $nom,

       'possesseur' => $possesseur,

       'console' => $console,

       'prix' => $prix,

       'nbre_joueurs_max' => $nbre_joueurs_max,

       'commentaires' => $commentaires

       ));

        

echo 'Le jeu a bien été ajouté !';

?>


Désormais je ne mets plus l'étape de la connexion à MySQL avec PDO dans mes codes pour les simplifier. Bien entendu, il faut toujours se connecter au préalable si on veut que la requête fonctionne.



Pour plus de clarté, j'ai utilisé ici des marqueurs nominatifs. Comme vous le voyez, j'ai créé l'array sur plusieurs lignes : c'est autorisé, et c'est surtout bien plus lisible. 

Les variables telles que $nom et $possesseur doivent avoir été définies précédemment. Généralement, on récupèrera des variables de $_POST (issues d'un formulaire) pour insérer une entrée dans la base de données. Nous découvrirons un cas pratique dans le TP suivant.

Créé avec HelpNDoc Personal Edition: Découvrez la puissance et la simplicité de l'interface utilisateur de HelpNDoc