Insérer plusieurs lignes avec des instructions préparées
L'insertion de plusieurs lignes avec des instructions préparées est un moyen pratique d'ajouter des données à une base de données tout en maintenant la sécurité. Imaginez que vous ayez un tableau de valeurs à insérer dans votre table de base de données :
$values = [ [ 'val1' => 'val1', 'val2' => 'val2', 'val3' => 'val3' ], [ 'val1' => 'another_val1', 'val2' => 'another_val2', 'val3' => 'another_val3' ], // and so on... ];
À l'aide d'une requête à insertion unique
Pour insérer ces lignes à l'aide d'une instruction préparée, nous peut utiliser des requêtes INSERT avec plusieurs clauses VALUES :
INSERT INTO table (col1, col2, col3) VALUES ( (:val11, :val21, :val31), (:val12, :val22, :val32), (:val13, :val23, :val33) )
Pour chaque ligne, nous créons un ensemble de paramètres, en remplaçant les valeurs statiques avec des paramètres nommés. Cela garantit que chaque paramètre est lié séparément.
$params = []; foreach ($values as $row) { $params[':val1' . count($params)] = $row['val1']; $params[':val2' . count($params)] = $row['val2']; $params[':val3' . count($params)] = $row['val3']; } $sql = "INSERT INTO table (col1, col2, col3) VALUES (" . implode(',', array_keys($params)) . ")"; $stmt = DB::getInstance()->prepare($sql); $stmt->execute($params);
Chunking pour un grand nombre de lignes
Si vous avez un nombre important de lignes à insérer, c'est plus efficace pour les diviser en lots plus petits pour éviter une utilisation excessive de la mémoire. Vous pouvez utiliser array_chunk pour diviser le tableau de valeurs en morceaux plus petits.
$chunkSize = 100; // Adjust this to your needs $chunks = array_chunk($values, $chunkSize); foreach ($chunks as $chunk) { // Prepare and execute insert query for each chunk // ... }
Approche alternative : INSÉRER un par un
Si vous devez insérer chaque ligne individuellement, vous pouvez utiliser l'approche suivante :
$stmt = DB::getInstance()->prepare( "INSERT INTO table (col1, col2, col3) VALUES (:val1, :val2, :val3)" ); foreach ($values as $row) { $stmt->bindParam(':val1', $row['val1']); $stmt->bindParam(':val2', $row['val2']); $stmt->bindParam(':val3', $row['val3']); $stmt->execute(); }
Cette méthode est moins efficace mais peut être nécessaire pour les grandes ensembles de données.
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!