Comment Insérer des Données dans une Table MySQL via PHP

Dans ce tutoriel, vous apprendrez comment INSÉRER des données dans une table MySQL via PHP. Vous pouvez utiliser deux méthodes, MySQLi et PDO. Avant de commencer ce guide d’insertion de données MySQL via PHP, vous devez avoir accès à votre panneau de contrôle d’hébergement.

Création d’une table MySQL

Tout d’abord, nous devons créer une table pour vos données. Si vous en avez déjà créé un, passez à la section suivante. La création d’une table est un processus simple que vous pouvez faire avec phpMyAdmin, qui se trouve dans votre panneau de contrôle d’hébergement.

phpMyAdmin sous les bases de données de hPanel

Après avoir ouvert une session sur votre page phpMyAdmin, vous devriez voir quelque chose de similaire à ceci :

Page principale de phpMyAdmin

Nous allons créer une table nommée Etudiants pour notre base de données u000000001_nom. Vous pouvez créer une nouvelle table en remplissant le champ Nom et en cliquant sur Exécuter. Ensuite, vous serez dirigé vers une nouvelle page où vous pourrez entrer toutes les informations nécessaires à votre table :

Table MySQL nommée Etudiants créée dans MyPHPAdmin

Comme il s’agit d’une configuration simple, pour plus d’informations concernant la structure d’une table/base de données et le type de paramètres que vous pouvez utiliser avec les colonnes, référez-vous à la documentation officielle de phpMyAdmin.

Pour l’instant, voici quelques explications sur les colonnes que nous avons utilisées :

  • Nom – C’est le nom de votre colonne. Il sera affiché en haut de votre table.
  • Type – Il s’agit de votre type de données. Vous pouvez définir int, varchar, text, et bien d’autres encore. Par exemple, nous avons choisi varchar parce que nous devons entrer un nom de type chaîne de caractères (qui utilise des lettres et non des chiffres).
  • Taille/Valeurs – Cette option permet de spécifier la taille maximale que peut avoir votre entrée dans cette colonne.
  • Index – Nous avons utilisé l’index « Primary » pour notre champ « ID ». Lors de la création de la table, il est recommandé d’avoir une colonne ID. Elle est utilisée pour énumérer les entrées de la table et est requise lors de la configuration des relations de la table. Nous avons également marqué « A_I« , qui signifie « Auto Increment« . Cela permet d’énumérer automatiquement les entrées (1,2,3,4…).

Cliquez sur Enregistrer et votre table sera créée.

Code PHP pour INSÉRER des données dans une table MySQL

Vous pouvez utiliser deux méthodes pour INSÉRER des données dans votre base de données MySQL. La méthode PHP MySQLi et la méthode PHP Data Object ou PDO.

Méthode MySQLi

Vous devez d’abord établir une connexion à une base de données. Ensuite, nous pouvons procéder à la requête MySQL INSERT. Voici un exemple de code PHP complet avec les méthodes de connexion et d’insertion de base :

<?php
$servername = "mysql.hostinger.fr";
$database = "u000000001_nom";
$username = "u000000001_user";
$password = "MotDePasse";
// Create connection
$conn = mysqli_connect($servername, $username, $password, $database);
// Check connection
if (!$conn) {
      die("Échec de la connexion : " . mysqli_connect_error());
}
 
echo "Connexion réussie";
 
$sql = "INSERT INTO Etudiants (prenom, nom, email) VALUES ('Test', 'Testing', 'Testing@tesing.com')";
if (mysqli_query($conn, $sql)) {
      echo "Nouveau enregistrement créé avec succès";
} else {
      echo "Erreur : " . $sql . "<br>" . mysqli_error($conn);
}
mysqli_close($conn);

La première partie du code (lignes 318) est destinée à la connexion à la base de données. Nous ne reviendrons pas sur cette partie.

Commençons donc par la ligne numéro 19 :

$sql = "INSERT INTO Etudiants (prenom, nom, email) VALUES ('Test', 'Testing', 'Testing@tesing.com')";

Ceci est la ligne de code PHP la plus importante car elle insère des données dans la base de données MySQL. L’instruction INSERT INTO permet d’ajouter des données dans la table de la base de données spécifiée. Dans cet exemple, nous ajoutons des données dans la table Etudiants.

Ensuite, entre les parenthèses, nous avons les noms des colonnes de la table spécifiées à l’endroit où nous voulons ajouter les valeurs : (prenom, nom, email). Les données seront ajoutées dans l’ordre spécifié. Si nous écrivions (email, nom, prenom), les valeurs seraient ajoutées dans le mauvais ordre.

La partie suivante est la déclaration VALUES. Ici, nous spécifions nos valeurs à insérer dans les colonnes spécifiées précédemment. De cette façon, chaque colonne représente une valeur spécifique. Par exemple, dans notre cas, ce serait comme ceci : prenom = Test, nom = Testing, email = Testing@testing.com.

Une autre chose qui vaut la peine d’être mentionnée est que nous venons d’exécuter une requête SQL en utilisant du code PHP. Les requêtes SQL doivent être placées entre les guillemets. Dans notre exemple, tout ce qui se trouve entre les guillemets et qui est écrit après $sql = est une requête SQL.

La partie suivante du code (lignes 20 à 22) vérifie si notre requête a abouti :

if (mysqli_query($conn, $sql)) {
     echo "Nouveau enregistrement créé avec succès";
}

Il affiche simplement un message de réussite si la requête que nous avons lancée a abouti.

Et la dernière partie (lignes 22 à 24) affiche un message différent au cas où notre requête n’a pas abouti :

else {
     echo "Erreur : " . $sql . "<br>" . mysqli_error($conn);
}

Il nous fournira un message SQL d’erreur au cas où quelque chose ne fonctionnerait pas.

Méthode PHP Data Object (PDO)

Comme dans l’exemple précédent, nous avons d’abord besoin d’une connexion à la base de données, ce qui se fait en créant un nouvel objet AOP – Comme la connexion à la base de données MySQL est un objet PDO, vous devez utiliser différentes méthodes PDO (toute fonction faisant partie d’un objet) pour préparer et exécuter les requêtes. Les méthodes des objets sont appelées ainsi :

$the_Object->the_Method();

PDO vous permet de préparer le code SQL avant qu’il ne soit exécuté. La requête SQL est évaluée et corrigée avant d’être exécutée. Une attaque simplifiée par injection SQL peut être réalisée en tapant simplement du code SQL dans un champ d’un formulaire. Par exemple :

// L'utilisateur écrit ceci dans le champ utilisateur d'un formulaire de connexion
john"; DROP DATABASE user_table;
// The final query becomes this
"SELECT * FROM user_table WHERE utilisateur = john"; DROP DATABASE user_table;

Comme le code SQL est syntaxiquement correct, le point-virgule fait de DROP DATABASE user_table une nouvelle requête SQL, et votre table utilisateur est supprimée. Les instructions préparées ne permettent pas aux caractères «  et ; de terminer la requête originale et l’instruction malveillante DROP DATABASE ne sera jamais exécutée.

Vous devez toujours utiliser des déclarations préparées lorsque vous envoyez ou recevez des données de la base de données avec PDO.

Pour utiliser les déclarations préparées, vous devez écrire une nouvelle variable qui appelle la méthode prepare() de l’objet de la base de données.

Sur le code correct :

<?php
$servername = "mysql.hostinger.fr"; 
$database = "u000000001_nom"; 
$username = "u000000001_user"; 
$password = "MotDePasse";
$sql = "mysql:host=$servername;dbname=$database;";
$dsn_Options = [PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION];

// Create a new connection to the MySQL database using PDO, $my_Db_Connection is an object
try { 
  $my_Db_Connection = new PDO($sql, $username, $password, $dsn_Options);
  echo "Connexion réussie";
} catch (PDOException $error) {
  echo 'Échec de la connexion : ' . $error->getMessage();
}

// Set the variables for the person we want to add to the database
$first_Name = "Test";
$last_Name = "Testing";
$email = "Testing@testing.com";

// Here we create a variable that calls the prepare() method of the database object
// The SQL query you want to run is entered as the parameter, and placeholders are written like this :placeholder_name
$my_Insert_Statement = $my_Db_Connection->prepare("INSERT INTO Etudiants (prenom, nom, email) VALUES (:first_name, :last_name, :email)");

// Now we tell the script which variable each placeholder actually refers to using the bindParam() method
// First parameter is the placeholder in the statement above - the second parameter is a variable that it should refer to
$my_Insert_Statement->bindParam(:first_name, $first_Name);
$my_Insert_Statement->bindParam(:last_name, $last_Name);
$my_Insert_Statement->bindParam(:email, $email);

// Execute the query using the data we just defined
// The execute() method returns TRUE if it is successful and FALSE if it is not, allowing you to write your own messages here
if ($my_Insert_Statement->execute()) {
  echo "Nouveau enregistrement créé avec succès";
} else {
  echo "Impossible de créer l'enregistrement";
}

// At this point you can change the data of the variables and execute again to add more data to the database
$first_Name = "John";
$last_Name = "Smith";
$email = "john.smith@email.com";
$my_Insert_Statement->execute();

// Execute again now that the variables have changed
if ($my_Insert_Statement->execute()) {
  echo "Nouveau enregistrement créé avec succès";
} else {
  echo "Impossible de créer l'enregistrement";
}

Sur les lignes 28, 29 et 30, nous utilisons la méthode bindParam() de l’objet de la base de données. Il existe également la méthode bindValue() qui est très différente.

  • bindParam() – Cette méthode évalue les données lorsque la méthode execute() est atteinte. La première fois que le script atteint une méthode execute(), il voit que $first_Name correspond à « Test », lie cette valeur et exécute la requête. Lorsque le script atteint la deuxième méthode execute(), il voit que $first_Name correspond maintenant à « John », lie cette valeur et exécute à nouveau la requête avec les nouvelles valeurs. Ce qu’il faut retenir, c’est que nous avons défini la requête une fois et que nous l’avons réutilisée avec des données différentes à différents endroits du script.
  • bindValue() – Cette méthode évalue les données dès que la valeur bindValue() est atteinte. Comme la valeur de $first_Name a été fixée à « Test » lorsque la méthode bindValue() est atteinte, elle sera utilisée chaque fois qu’une méthode execute() sera appelée pour $my_Insert_Statement.

Notez que nous réutilisons la variable $first_Name et donnons une nouvelle valeur à la deuxième fois. Si vous vérifiez votre base de données après avoir exécuté ce script, vous avez les deux noms définis, bien que la variable $first_Name soit égale à « John » à la fin du script. N’oubliez pas que PHP évalue un script entier avant de l’exécuter.

Si vous mettez à jour le script pour remplacer bindParam par bindValue, vous insérerez dans MySQL « Test Testing » deux fois dans la base de données et John Smith sera ignoré.

Confirmer la réussite et résoudre les problèmes communs

Si la requête que nous avons lancée et insérée dans la base de données MySQL a réussi, nous verrons le message suivant :

Connexion réussie
Nouveau enregistrement créé avec succès

Dépannage des erreurs courantes

Toutefois, il arrive que le nouvel enregistrement comporte une erreur avec l’insertion SQL. Mais ne vous inquiétez pas, il existe plusieurs moyens de corriger ces erreurs MySQL.

MySQLi

Si un message d’erreur MySQLi s’affiche, nous pouvons procéder de la manière suivante pour le corriger. Par exemple, faisons une erreur de syntaxe dans notre code, si nous le faisons, nous verrons quelque chose de similaire :

Connexion réussie
Erreur : INSERT INTO Etudiants {prenom, nom, email} VALUES ('Test', 'Testing', 'Testing@testing.com')
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '{prenom, nom, email} VALUES ('Test', 'Testing', 'Test@testingcom')' at line 1"

Comme vous pouvez le voir, la première partie du code est bonne, la connexion a été établie avec succès, mais notre requête SQL a échoué.

"Erreur : INSERT INTO Etudiants {prenom, nom, email} VALUES ('Test', 'Testing', 'Testing@testing.com') You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '{prenom, nom, email} VALUES ('Test', 'Testing', 'Test@testingcom')' at line 1"

Il y a une erreur de syntaxe qui, malheureusement, a provoqué l’échec de notre script. L’erreur se trouvait ici :

$sql = "INSERT INTO Etudiants {prenom, nom, email} VALUES ('Test', 'Testing', 'Testing@testing.com')";

Nous avons utilisé des crochets bouclés au lieu de la simple parenthèse. Comme ce n’est pas correct, notre script a commis une erreur de syntaxe.

PDO

Sur la ligne 7 de la connexion PDO, le mode d’erreur est réglé pour afficher toutes les exceptions. Si cela n’était pas indiqué dans le script et que la requête échouait, vous ne recevriez aucun message d’erreur. Lorsque les exceptions sont activées, le problème spécifique est affiché.

En règle générale, cette fonction ne doit être utilisée que lors du développement d’un script car elle peut exposer les noms de la base de données et des tables, que vous préférez peut-être cacher à toute personne qui pourrait tenter d’accéder à vos données de manière malveillante. Dans le cas ci-dessus où des accolades ont été utilisées au lieu de parenthèses, l’erreur ressemble à ceci :

Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; <code>check the manual that corresponds to your MySQL server version for the right syntax to use near '{prenom, nom, email} VALUES ('Test', 'Testing', 'Testing@testing.com')' at line 1"</code>

Autres problèmes possibles que vous pourriez rencontrer :

  • Colonnes incorrectes spécifiées (colonnes inexistantes ou faute d’orthographe).
  • Un type de valeur étant attribué à un autre type de colonne. Par exemple, si nous essayons d’attribuer un nombre 47 dans une colonne Nom, nous obtiendrons une erreur car il est censé s’agir d’une valeur de type texte. Mais si nous avons attribué un nombre entre guillemets, par exemple “47”, cela fonctionnerait parce que notre nombre serait attribué comme une chaîne de caractères à la colonne.
  • Tenter de saisir des données dans un tableau qui n’existe pas ou faire une faute d’orthographe dans le tableau.

Toutes ces erreurs peuvent être facilement corrigées en suivant les directives relatives aux messages d’erreur ou en consultant le journal des erreurs.

Après une saisie réussie, les données devraient être ajoutées à notre base de données. Voici un exemple de la table à laquelle nous avons ajouté nos données lorsqu’elle est vue depuis phpMyAdmin.

Données phpMyAdmin insérées dans MySQL à l'aide de PHP

Conclusion

Dans ce tutoriel, vous avez appris à INSÉRER des données dans une table MySQL via PHP en utilisant MySQLi et PDO. Vous avez également appris à résoudre les erreurs de connexion les plus courantes. Savoir comment utiliser PHP pour ajouter des données dans une base de données MySQL est utile, que vous appreniez à coder ou à créer votre site web.

Author
L'auteur

Ismail

Ismail est un spécialiste du référencement et de la localisation chez Hostinger. Il est passionné par la technologie et le développement web et possède des années d'expérience dans le domaine informatique. Ses passe-temps incluent les jeux vidéo et le football.