Lorsqu'il s'agit d'insertion de données en masse, la construction d'une seule requête avec plusieurs lignes peut être plus efficace que l'exécution de plusieurs requêtes distinctes. Cependant, l'utilisation d'instructions préparées pour l'insertion de plusieurs lignes nécessite une approche légèrement différente.
Création de l'instruction avec plusieurs lignes
Pour insérer plusieurs lignes à l'aide d'une instruction préparée, vous pouvez exploiter la méthode de concaténation de chaînes :
<code class="php">$rows = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]; $rowCount = count($rows); $values = "(" . implode('),(', array_fill(0, $rowCount, '?,?,?')) . ")"; $stmt = $mysqli->prepare("INSERT INTO table (col1, col2, col3) VALUES $values");</code>
Ici, la variable $values crée la partie de la requête contenant les valeurs de ligne au format (?, ?, ?), (?, ?, ?), ....
Liaison et exécution
Une fois l'instruction préparée, les valeurs peuvent être liées et l'instruction peut être exécutée. Cependant, notez que bind_param s'attend à ce que tous les paramètres soient transmis sous la forme d'un seul tableau, les plusieurs lignes doivent donc être aplaties et décompressées à l'aide de la méthode array_merge(...$rows) :
<code class="php">$stmt->bind_param(str_repeat('i', $rowCount * 3), ...array_merge(...$rows)); $stmt->execute();</code>
Cette approche vous permet pour effectuer plusieurs insertions de lignes en un seul accès à la base de données, améliorant ainsi l'efficacité des opérations d'insertion de données en masse.
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!