PHP MySQL Insérer plusieurs lignes


Insertion de plusieurs enregistrements dans MySQL à l'aide de MySQLi et PDO

La fonction mysqli_multi_query() peut être utilisée pour exécuter plusieurs instructions SQL.

L'exemple suivant ajoute trois nouveaux enregistrements à la table "MyGuests" :

Exemple (MySQLi - orienté objet)

<?php $servername = "localhost"; $username = "username"; $password = "password"; $dbname = "myDB"; //Créer la connexion $conn = new mysqli($servername, $username, $password, $dbname); //Vérifier la connexion if ($conn->connect_error) { die("Échec de la connexion :" . $conn->connect_error); } $sql = "INSERT INTO MyGuests (firstname, lastname, email) VALUES ('John', 'Doe', '[email protected]');"; $sql .= "INSERT INTO MyGuests (firstname, lastname, email) VALUES ('Mary', 'Moe', '[email protected]');"; $sql .= "INSERT INTO MyGuests (firstname, lastname, email) VALUES ('Julie', 'Dooley', '[email protected]')"; if ($conn->multi_query($sql) === TRUE) { echo "Nouveaux enregistrements insérés avec succès"; } else { echo "Erreur : " . $sql . "<br>" . $conn->error; } $conn->close(); ?>


Note Veuillez noter que chaque instruction SQL doit être séparée par un point-virgule.

Exemple (MySQLi - procédural)

<?php $servername = "localhost"; $username = "username"; $password = "password"; $dbname = "myDB"; //Créer la connexion $conn = mysqli_connect($servername, $username, $password, $dbname); //Vérifier la connexion if (!$conn) { die("Échec de la connexion :" . mysqli_connect_error()); } $sql = "INSERT INTO MyGuests (firstname, lastname, email) VALUES ('John', 'Doe', '[email protected]');"; $sql .= "INSERT INTO MyGuests (firstname, lastname, email) VALUES ('Mary', 'Moe', '[email protected]');"; $sql .= "INSERT INTO MyGuests (firstname, lastname, email) VALUES ('Julie', 'Dooley', '[email protected]')"; if (mysqli_multi_query($conn, $sql)) { echo "Nouveaux enregistrements insérés avec succès"; } else { echo "Erreur : " . $sql . "<br>" . mysqli_error($conn); } mysqli_close($conn); ?>


Exemple (PDO)

<?php $servername = "localhost"; $username = "username"; $password = "password"; $dbname = "myDBPDO"; try { $conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password); // définir le mode d'erreur PDO sur exception $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); //Commencer la transaction $conn->beginTransaction(); //Instruction SQL $conn->exec("INSERT INTO MyGuests (firstname, lastname, email) VALUES ('John', 'Doe', '[email protected]')"); $conn->exec("INSERT INTO MyGuests (firstname, lastname, email) VALUES ('Mary', 'Moe', '[email protected]')"); $conn->exec("INSERT INTO MyGuests (firstname, lastname, email) VALUES ('Julie', 'Dooley', '[email protected]')"); //Valider la transaction $conn->commit(); echo "Nouveaux enregistrements insérés avec succès"; } catch(PDOException $e) { //Annuler si l'exécution échoue $conn->rollback(); echo $sql . "<br>" . $e->getMessage(); } $conn = null; ?>



Utilisation des requêtes préparées

L'extension mysqli fournit une deuxième façon d'insérer des instructions.

Nous pouvons préparer des requêtes et lier des paramètres.

L'extension mysql peut envoyer des instructions ou des requêtes à la base de données MySQL sans données. Vous pouvez associer ou « lier » des variables aux colonnes.

Exemple (MySQLi avec des requêtes préparées)

<?php $servername = "localhost"; $username = "username"; $password = "password"; $dbname = "myDB"; //Créer la connexion $conn = new mysqli($servername, $username, $password, $dbname); //Vérifier la connexion if ($conn->connect_error) { die("Échec de la connexion :" . $conn->connect_error); } else { $sql = "INSERT INTO MyGuests(firstname, lastname, email) VALUES(?, ?, ?)"; //Initialiser un objet de requête pour mysqli_stmt_prepare() $stmt = mysqli_stmt_init($conn); //Requête préparée if (mysqli_stmt_prepare($stmt, $sql)) { //Lier les paramètres mysqli_stmt_bind_param($stmt, 'sss', $firstname, $lastname, $email); //Définir les paramètres et exécuter $firstname = 'John'; $lastname = 'Doe'; $email = '[email protected]'; mysqli_stmt_execute($stmt); $firstname = 'Mary'; $lastname = 'Moe'; $email = '[email protected]'; mysqli_stmt_execute($stmt); $firstname = 'Julie'; $lastname = 'Dooley'; $email = '[email protected]'; mysqli_stmt_execute($stmt); } } ?>

Nous pouvons constater que l'exemple ci-dessus utilise la modularisation pour gérer le problème. Nous pouvons obtenir une lecture et une gestion plus faciles en créant des blocs de code.

Faites attention à la liaison des paramètres. Regardons le code dans mysqli_stmt_bind_param() :

mysqli_stmt_bind_param($stmt, 'sss', $firstname, $lastname, $email);

Cette fonction lie les requêtes paramétrées et transmet les paramètres à la base de données. Le deuxième paramètre est "sss". La liste suivante montre les types de paramètres. Le caractère 's' indique à MySQL que le paramètre est une chaîne de caractères.

Peut être l'un des quatre types de paramètres suivants :

  • i - entier
  • d - nombre à virgule flottante en double précision
  • s - chaîne de caractères
  • b - objet de stockage de blobs binaires

Chaque paramètre doit avoir un type spécifié pour garantir la sécurité des données. En vérifiant le type, le risque de vulnérabilités d'injection SQL peut être réduit.

Autres extensions