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";
$conn = new mysqli($servername, $username, $password, $dbname);
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();
?>
 |
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";
$conn = mysqli_connect($servername, $username, $password, $dbname);
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);
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$conn->beginTransaction();
$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]')");
$conn->commit();
echo "Nouveaux enregistrements insérés avec succès";
}
catch(PDOException $e)
{
$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";
$conn = new mysqli($servername, $username, $password, $dbname);
if ($conn->connect_error) {
die("Échec de la connexion :" . $conn->connect_error);
} else {
$sql = "INSERT INTO MyGuests(firstname, lastname, email) VALUES(?, ?, ?)";
$stmt = mysqli_stmt_init($conn);
if (mysqli_stmt_prepare($stmt, $sql)) {
mysqli_stmt_bind_param($stmt, 'sss', $firstname, $lastname, $email);
$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