Maison  >  Article  >  développement back-end  >  Comment insérer plusieurs lignes avec une seule instruction préparée dans MySQLi ?

Comment insérer plusieurs lignes avec une seule instruction préparée dans MySQLi ?

DDD
DDDoriginal
2024-10-20 16:38:02259parcourir

How to Insert Multiple Rows with a Single Prepared Statement in MySQLi?

Insertion de plusieurs lignes avec une seule instruction préparée dans MySQLi

Problème :

Insérer plusieurs lignes dans une base de données à l'aide d'une instruction préparée, évitant ainsi le besoin de requêtes distinctes pour chaque ligne.

Solution :

Bien que les instructions préparées gèrent généralement des opérations sur une seule ligne, il est possible pour insérer plusieurs lignes à l'aide d'une syntaxe et d'une méthodologie de requête spéciales.

Approche :

  1. Créez une chaîne de valeurs : utilisez array_merge() et implode() pour construire une chaîne de valeurs au format "(, , ), ...". Ceci représente les lignes à insérer.
  2. Préparez l'instruction : Préparez une requête avec la chaîne de valeurs comme clause VALUES, en la mettant entre parenthèses.
  3. Créez un paramètre de liaison : Déterminez le nombre de lignes et préparez un paramètre de liaison avec une répétition de chaîne de "i" (pour les valeurs entières) multipliée par le nombre de lignes multiplié par le nombre de colonnes par ligne.
  4. Liez les valeurs : utilisez ...array_merge( ...$rows) pour décompresser les valeurs du tableau multidimensionnel et les lier au paramètre.
  5. Exécuter l'instruction : exécutez l'instruction préparée pour insérer les lignes spécifiées avec une seule requête.

Exemple de code :

<code class="php">$rows = [[1, 2, 3], [4, 5, 6], [7, 8, 9]];
$rowCount = count($rows);
$values = "(&" . implode('),(', array_fill(0, $rowCount, '?,?,?')) . "&)";

$stmt = $conn->prepare("INSERT INTO test (col1, col2, col3) VALUES $values");
$stmt->bind_param(str_repeat('i', $rowCount * 3), ...array_merge(...$rows));
$stmt->execute();</code>

Approche alternative :

Il est également acceptable d'utiliser une instruction préparée avec une seule ligne de des espaces réservés et exécutez-le en boucle pour chaque ligne, ce qui est plus simple mais potentiellement moins efficace.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn