Informatique


Ajouter un enregistrement dans une table

La requête INSERT

INSERT permet d'insérer une ou plusieurs lignes dans une table.

Syntaxe
INSERT [INTO]  nom_table   (nom_champ1, nom_champ2,...)VALUES (valeur1,valeur2,...)
  • Le premier jeu de parenthèses précise les champs dans lesquels seront insérés les valeurs du deuxième jeu de parenthèses. Attention à l'ordre: la valeur "valeur1" sera affectée dans nom_champ1 et "valeur2" dans nom_champ2.
  • L'insertion de chaînes de caractères dans un champ texte se fait toujours avec les guillemets simples, ', encadrant la valeur.
  • Dans le cas où la chaîne comporte des guillemets, ceux-ci sont précédés du caractère \.
  • Pour les données numériques les guillemets sont facultatifs.
  • Si on omet un champ lors d'une requête INSERT, c'est la valeur par défaut ou la valeur NULL qui est affectée au champ omis.
  • Si un champ est AI:
    1. il peut être renseigné et affecté avec NULL
      INSERT eleve(id_ele, nom_ele, preno_ele, daten_ele)  VALUES (NULL, '$nom', '$prenom', '$daten')
    2. il peut être omis
      INSERT eleve(nom_ele, preno_ele, daten_ele)  VALUES ('$nom', '$prenom', '$daten')

Six autres façons d'utiliser INSERT

Il existe de nombreuses façons de modifier la syntaxe pour aboutir à un résultat d'insertion équivalent à celui ci-dessus, cinq exemples:

  • Une insertion multiple: ne pas oublier la virgule entre les insertions.
    Syntaxe
    INSERT INTO eleve(id_ele, nom_ele, preno_ele, daten_ele) 
     VALUES (NULL, '$nom1', '$prenom1', '$daten1'),
            (NULL, '$nom2', '$prenom2', '$daten2'),
            (NULL, '$nom3', '$prenom3', '$daten3')
  • Sans le mot INTO:
    Syntaxe
    INSERT eleve(id_ele, nom_ele, preno_ele, daten_ele)  VALUES (NULL, '$nom', '$prenom', '$daten')
    
  • Sans les noms des champs:
    Syntaxe
    INSERT eleve VALUES (NULL, '$nom', '$preno', '$daten')

    Attention, l'insertion se fera dans l'ordre des champs, il s'agit donc d'être très prudent!

  • Sans tous les noms des champs:
    Syntaxe
    INSERT INTO eleve(nom_ele)  VALUES ('$nom')

    La valeur par défaut ou NULL sera affectée aux autres champs.

  • Par un fichier externe:
    Insérer des tuples dans une BD peut également se faire au moyen de fichiers externes, avec des fichier .csv, .sql, .xls et d'autres.
    Il suffit simplement que les données soit organisées en colonnes!
    La manoeuvre est relativement simple et ne devrait pas vous posez beaucoup de soucis.
    La commande est LOAD DATA, pour celles et ceux qui voudraient en savoir plus.
.


Création et exécution de la requête sql

Prenons un exemple simple, la table eleve de la database ttsi dont la strucure est la suivante:

Nous établissons une requête permettant d'ajouter un enregistrement dans la table eleve. et nous la stockons dans la variable $req.

$req="INSERT INTO eleve(id_ele,nom_ele,preno_ele,daten_ele) VALUES (NULL,'$nom','$prenom','$dn')";

Pour exécuter la requête on utilise l'objet PDO créé lors de la connexion sur lequel nous exécutons la méthode exec(), on récupère la réponse dans la variable $reqex.

$reqex=$con->exec($req);

Exemple
<?php
$con = new PDO("mysql:host=localhost;dbname=ttsi;", "root", "");
$nom="Vandevelde";
$prenom="Louis";
$dn="1962-05-17";
$req="INSERT INTO eleve(id_ele,nom_ele,preno_ele,daten_ele) VALUES (NULL,'$nom','$prenom','$dn')";
$reqex=$con->exec($req);
if($reqex){echo "ok";}else{echo "erreur";}
$con=NULL;
?>

  • la requête est une chaîne de caractères, elle est affectée à la variable $req
  • INTO est facultatif, sa présence facilite la lecture de la requête
  • la clé étant un champ auto-increment on laisse MySQL générer automatiquement la clé en indiquant la valeur système NULL
  • les champs sont affectés dans l'odre dans lequel ils apparaissent dans la première paire de parenthèses
  • les valeurs sont entourées de quotes.


La méthode lastInsertId()

La méthode lastInsertId() renvoie l'id du dernier enregistrement insérer dans la base de données pour la connection en cours.

Exemple
<?php
$con = new PDO("mysql:host=localhost;dbname=ttsi;", "root", "");
$nom="Vandevelde";
$prenom="Louis";
$dn="1962-05-17";
$req="INSERT INTO eleve(id_ele,nom_ele,preno_ele,daten_ele) VALUES (NULL,'$nom','$prenom','$dn')";
$reqex=$con->exec($req);
if($reqex){
	$dernier=$con->lastInsertId();
	echo $dernier;
	}
	else{
	echo "erreur";
	}
$con=NULL;
?>