oujood.com

Inserer des données dans une table de la base de données MySQL avec Insert Into en utilisant MySQLi et PDO

Insérez les données dans une Table de base de données. Insert Into est employée pour ajouter de nouveaux enregistrements à une table de base de données.
Une fois qu'une base de données et une table ont été créées, et comme nous l'avons vu dans le chapitre précédent, on peut commencer à y ajouter des données.

chercher |

Inserer des données dans une table MySQL Insert Into

pour insérez les données dans une Table de base de données on utilise l'istruction Insert Into
Insert Into est employée pour ajouter de nouveaux enregistrements à une table de base de données.
Voici quelques règles de syntaxe à suivre :
1. En PHP la requête SQL doit être encadrée par des guillemets.
2. Les valeurs des chaînes de caractères dans la requête SQL doivent être mises entre guillemets.
3. Les valeurs numériques ne doivent pas être mises entre guillemets
4. Le mot NULL ne doit pas être mis entre guillemets
Syntaxe
Il est possible d'écrire Insert Into sous deux formes.
La première forme ne spécifie pas les noms de colonne où les données seront insérées, seulement leurs valeurs :


INSERT INTO nom_de_table
VALUES (value1, value2, value3,...)
La deuxième forme spécifie les noms de colonne et les valeurs à insérer :
INSERT INTO nom_de_table (colonne1, colonne2, colonne3,…)
VALEURS (valeur 1, valeur 2, value3,…) 

Note : Si une colonne est AUTO_INCREMENT (comme la colonne "id"), il n'est pas nécessaire de spécifier sa valeur dans la requête SQL ; MySQL ajoutera automatiquement la valeur.

Exemple :
Dans le chapitre précédent nous avons créé une table appelée "visiteurs", avec six colonnes.
Nous emploierons la même table dans les exemples qui suivent.

Exemple ajouter des données dans une table en utilisant MySQLi orienté objet

L'exemple suivant ajoute deux nouveaux records à la table de "visiteurs" :

Exemple :       Copier le code


<?php
$servername = "localhost";
$username = "root";
$password = "";
$dbname = "mabase";

// Créer une conexion
$conn = new mysqli($servername, $username, $password, $dbname);
// verifier la connexion
if ($conn->connect_error) {
  die("La connexion a échouée: " . $conn->connect_error);
}

$sql = "INSERT INTO `visiteurs` ( `nom`, `prenom`, `age`, `paye`, `sexe`, `dateInscrit`)
VALUES( 'Griffin', 'Peter', 35, 'France', 'Homme', '2003-01-12'),
( 'Glenn', 'Roberta', 19, 'Brésil', 'femme', '2003-02-12')
";

if ($conn->query($sql) === TRUE) {
  echo "les nouveaux enregistrements ajoutés avec succés";
} else {
  echo "Erreur: " . $sql . "
" . $conn->error; } $conn->close(); ?>
Dans l’exemple ci-dessus nous avons laissé le "id" vide car il est en auto incrémentation donc il sera ajouté automatiquement.

Exemple ajout de données avec MySQLi procédural

Code

  Copier le code

$servername = "localhost";
$username = "root";
$password = "";
$dbname = "mabase";

// Créer une connexion
$conn = mysqli_connect($servername, $username, $password, $dbname);
// vérifier la connexion
if (!$conn) {
  die("La connexion a échouée: " . mysqli_connect_error());
}

$sql = "INSERT INTO `visiteurs` ( `nom`, `prenom`, `age`, `paye`, `sexe`, `dateInscrit`)
VALUES( 'Griffin', 'Peter', 35, 'France', 'Homme', '2003-01-12'),
( 'Glenn', 'Roberta', 19, 'Brésil', 'femme', '2003-02-12')
";

if (mysqli_query($conn, $sql)) {
  echo "Nouveaux enregistrement ajouter avec succés";
} else {
  echo "Erreur: " . $sql . "
" . mysqli_error($conn); } mysqli_close($conn);

Exemple ajout de données avec PDO

Code

  Copier le code

$servername = "localhost";
$username = "root";
$password = "";
$dbname = "mabase";
try {
  $conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password);
  // définir le mode exception d'erreur PDO 
  $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
  
  $sql = "INSERT INTO `visiteurs` ( `nom`, `prenom`, `age`, `paye`, `sexe`, `dateInscrit`)
VALUES( 'Griffin', 'Peter', 35, 'France', 'Homme', '2003-01-12'),
( 'Glenn', 'Roberta', 19, 'Brésil', 'femme', '2003-02-12')
";

  // utiliser la fonction exec() car aucun résultat n'est renvoyé
  $conn->exec($sql);
  echo "Nouveaux enregistrement ajoutés avec sucéés";
} catch(PDOException $e) {
  echo $sql . "
" . $e->getMessage(); } $conn = null;

Insérez les données d'un formulaire dans une base de données

Ici nous créerons un formulaire HTML qui peut être employée pour ajouter des nouveaux records à la table de "visiteurs".

Voici la forme de HTML :
Page "formulaire.php"

Exemple :       Copier le code


<html>
<body>

<form action="insert.php" method="post">

Nom: <input type="text" name="Nom" />
Prénom: <input type="text" name="Prénom" />
Age: <input type="text" name="age" />
Payé : <input type="text" name="paye" />
Genre: <input type="text" name="sexe" />

<input type="submit" />
</form>

</body>
</html>

Quand un utilisateur clique sur le bouton de soumission sous la forme de HTML dans l'exemple ci-dessus, les données du formulaire sont envoyées à une page "insert.php".
La page "insert.php" se relie à la base de données, et recherche les valeurs du formulaire avec les variables $_POST.
Puis, on exécute l'insertion dans le code php, et un nouveau enregistrement sera ajouté à la table de "visiteurs".
Voici la page "insert.php" :

Exemple :       Copier le code


<?PHP

$servername = "localhost";
$username = "root";
$password = "";
$dbname = "mabase";
$date_inscri= date("Y/m/d");
try {
  $conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password);
  // définir le mode exception d'erreur PDO 
  $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
  
  $sql = "INSERT INTO `visiteurs` ( `nom`, `prenom`, `age`, `paye`, `sexe`, `dateInscrit`)
VALUES( '$_POST[nom]','$_POST[prenom]','$_POST[age]','$_POST[paye]','$_POST[sexe]','$date_inscri')
";
  // utiliser la fonction exec() car aucun résultat n'est renvoyé
  $conn->exec($sql);
  echo "Nouveaux enregistrement ajoutés avec sucéés<br> <a href='formulaire.php'>Retour au formulaire</a>";
} catch(PDOException $e) {
  echo $sql . "<br>" . $e->getMessage();
}
$conn = null;

?>

Dans cet exemple nous créer deux pages:
Une qui contient le formulaire que nous avons nommé "formulaire.php"
Une page qui traite les données du formulaire que nous avons nommé "insert.php" .
Pour insérer la date nous avons utilisé la fonction php date() qui renvoie la date du jour.

Nous avons aussi utiliser la PDO pour ajouter le contenue du formulaire dans la table de données, mai vous pouver utiliser mysql procédural ou orienté objet.

Gestion de contacts (suite)

Pour cette partie du tutorial, je reviendrai sur la base de données de contacts que nous avons créé dans le chapitre précédent dont voici le lien :
table gestion des contacts, si vous voulez y revenir pour rappel.
Nous allons maintenant ajouter la première information d’un contact à la base de données :

Voici la liste des informations concernant le contact que nous voulons ajouter à la table contact

  • prenom : John
  • nom : Smith
  • Telephone : 01234 567890
  • Mobile : 00112 334455
  • fax : 01234 567891
  • email : johnsmith@oujood.com
  • Web : https://www.oujood.com

Une seule commande sera nécessaire pour tous mettre dedans :

$query = "INSERT INTO contacts VALUES ('John','Smith','01234 567890','00112 334455','01234 567891','johnsmith@website.com','http://www.website.com')";

Cela peut sembler un peu déroutant au début, donc je vais vous expliquer ce que cela signifie .
Tout d'abord $query est une variable qui va contenir notre commande.
La partie suivante :

INSERT INTO contacts VALUES(…),

C’est la commande, il est assez facile à comprendre. Elle demande à PHP d’insérer dans la table appelée contacts les valeurs entre parenthèses.

La partie entre parenthèses contient toutes les informations à ajouter. Il utilise tous les champs dans l'ordre et insère les informations entre les guillemets. Par exemple :

John
sera insérée dans le 2éme champ dans la table contacts que nous avons nommé prenom.

Donc il faut mettre les valeurs dans l’ordre des champs de votre table

Vous avez peut-être remarqué que nous n’avons pas inséré de valeur dans le premier champ dans la base de données (id). C'est parce qu’il sera donné automatiquement par l’ auto_increment

Pour exécuter cette commande on va faire appelle à la fonction mysql_query() comme suit :

mysqli_query($query) ;


voici le code complet pour ajouter le contact en utilisant mysqli procédural

Code

  Copier le code

<?php
$servername = "localhost";
$username = "root";
$password = "";
$dbname = "mabase";
// Créer une connexion
$conn = mysqli_connect($servername, $username, $password, $dbname);
// vérifier la connexion
if (!$conn) {
  die("La connexion a échouée: " . mysqli_connect_error());
}

$sql = "INSERT INTO contacts VALUES ('','John','Smith','01234 567890','00112 334455','01234 567891','johnsmith@oujood.com','https://www.oujood.com')
";

if (mysqli_query($conn, $sql)) {
  echo "Nouveaux enregistrement ajouter avec succés";
} else {
  echo "Erreur: " . $sql . "
" . mysqli_error($conn);
}

mysqli_close($conn);

?>

PHP MySQL Instructions ou requêtes préparées

Les requêtes préparées sont très utiles contre les injections SQL.

Instructions préparées et paramètres liés

Une instruction préparée est une fonction utilisée pour exécuter les mêmes instructions SQL (ou des instructions similaires) de manière répétée et avec une grande efficacité.


Les instructions préparées fonctionnent essentiellement comme suit :

Prepare : Un modèle d'instruction SQL est créé et envoyé à la base de données. Certaines valeurs ne sont pas spécifiées, appelées paramètres (marqués " ?"). Exemple : INSERT INTO Mes Invités VALUES( ?, ?, ?)
La base de données analyse, compile et optimise la requête sur le modèle d'instruction SQL, puis stocke le résultat sans l'exécuter.

Execute : À une étape ultérieure, l'application lie les valeurs aux paramètres et la base de données exécute l'instruction. L'application peut exécuter l'instruction autant de fois que nécessaire avec des valeurs différentes.

Par rapport à l'exécution directe des instructions SQL, les instructions préparées présentent trois avantages principaux :
1 - Les instructions préparées réduisent le temps d'analyse car la préparation de la requête n'est effectuée qu'une seule fois (bien que l'instruction soit exécutée plusieurs fois).
2 - Les paramètres liés minimisent la bande passante vers le serveur car vous ne devez envoyer que les paramètres à chaque fois, et non la requête entière.
3 - Les instructions préparées sont très utiles contre les injections SQL, car les valeurs des paramètres, qui sont transmises ultérieurement en utilisant un protocole différent, ne doivent pas être correctement échappées. Si le modèle de déclaration original n'est pas dérivé d'une entrée externe, l'injection SQL ne peut pas se produire.

Les requêtes prépârées ne sont supportées que par mysql orienté objet et PDO

Requêtes préparées dans MySQLi

L'exemple suivant utilise les instructions préparées et les paramètres liés dans MySQLi :

Code

  Copier le code

<?php
$servername = "localhost";
$username = "root";
$password = "";
$dbname = "mabase";

// Créer une connection
$conn = new mysqli($servername, $username, $password, $dbname);
// verifier la connexion
if ($conn->connect_error) {
  die("Connection failed: " . $conn->connect_error);
}

// prepare and bind
$stmt = $conn->prepare("INSERT INTO `visiteurs` ( `nom`, `prenom`, `age`, `paye`, `sexe`, `dateInscrit`) VALUES (?, ?, ?, ?, ?, ?)");
$stmt->bind_param('ssisss', $nom, $prenom, $age,$paye,$sexe,$dateInscrit);

// set parameters and execute
$prenom= "John";
$nom = "Doe";
$age="36";
$paye="USA";
$sexe="homme";
$dateInscrit=date("Y/m/d");
$stmt->execute();

$prenom= "Mary";
$nom = "Moe";
$age="36";
$paye="France";
$sexe="femme";
$dateInscrit=date("Y/m/d");
$stmt->execute();

$prenom= "Julie";
$nom = "Dooley";
$age="36";
$paye="Belgique";
$sexe="femme";
$dateInscrit=date("Y/m/d");
$stmt->execute();

echo "les nouveaux enregistrements ajoutés avec succés";
  
$stmt->close();
$conn->close();
?>

Code à expliquer à partir de l'exemple ci-dessus :

VALUES (?, ?, ?, ?, ?, ?)

Dans notre SQL, nous insérons un point d'interrogation ( ?) là où nous voulons utiliser come valeur un nombre entier, une chaîne de caractères, un double ou une valeur blob.
Ensuite, jetez un coup d'œil à la fonction bind_param() :

$stmt->bind_param('ssisss', $nom, ....

Cette fonction lie les paramètres à la requête SQL et indique à la base de données quels sont les paramètres. L'argument "ssisss" liste les types de données que sont les paramètres. Le caractère s indique à mysql que le paramètre est une chaîne de caractères et i indique un entier.
L'argument peut être de l'un des quatre types suivants
i - nombre entier
d - double
s - chaîne de caractères
b - BLOB
Nous devons avoir un de ces types pour chaque paramètre.
En indiquant à mysql le type de données à attendre, nous minimisons ainsi le risque d'injections SQL.

Note : Si nous voulons insérer des données provenant de sources externes (comme l'entrée de l'utilisateur), il est très important que les données soient nettoyées et validées pour éviter les injections SQL.

Requêtes préparées dans PDO

L'exemple suivant utilise des instructions préparées et des paramètres liés dans PDO :

Code

  Copier le code

<?php
$servername = "localhost";
$username = "root";
$password = "";
$dbname = "mabase";

try {
  $conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password);
  // erreur mode exception
  $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
// préparer et relier
$stmt = $conn->prepare("INSERT INTO `visiteurs` ( `nom`, `prenom`, `age`, `paye`, `sexe`, `dateInscrit`) VALUES (:nom, :prenom, :age, :paye, :sexe, :dateInscrit)");
$stmt->bindParam(':nom', $nom);
$stmt->bindParam(':prenom', $prenom);
$stmt->bindParam(':age', $age);
$stmt->bindParam(':paye', $paye);
$stmt->bindParam(':sexe', $sexe);
$stmt->bindParam(':dateInscrit', $dateInscrit);

//définir les paramètres et exécuter
$prenom= "John";
$nom = "Doe";
$age="36";
$paye="USA";
$sexe="homme";
$dateInscrit=date("Y/m/d");
$stmt->execute();

$prenom= "Mary";
$nom = "Moe";
$age="36";
$paye="France";
$sexe="femme";
$dateInscrit=date("Y/m/d");
$stmt->execute();

$prenom= "Julie";
$nom = "Dooley";
$age="36";
$paye="Belgique";
$sexe="femme";
$dateInscrit=date("Y/m/d");
$stmt->execute();


echo "les nouveaux enregistrements ajoutés avec succés";
 } catch(PDOException $e) {
  echo "Error: " . $e->getMessage();
}
$conn = null; 

?>

Par carabde 20 Aout 2014



Voir aussi nos tutoriel :

dessiner avec php

Dessiner avec PHP la librairie GD

Balise option

Définit une option dans une liste déroulante

fonction strip_tags

Supprime les balises HTML et PHP d'une chaîne