Détermine si une variable est un tableau
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.
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 : 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 . "Dans l’exemple ci-dessus nous avons laissé le "id" vide car il est en auto incrémentation donc il sera ajouté automatiquement.
" . $conn->error; } $conn->close(); ?>
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);
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;
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 :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>
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.
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
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
<?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); ?>
Les requêtes préparées sont très utiles contre les injections SQL.
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é.
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
L'exemple suivant utilise les instructions préparées et les paramètres liés dans MySQLi :
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.
L'exemple suivant utilise des instructions préparées et des paramètres liés dans PDO :
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; ?>