Maison >base de données >tutoriel mysql >Puis-je utiliser une seule instruction préparée pour insérer plusieurs lignes dans PDO ?
Insérer plusieurs lignes à l'aide d'instructions préparées dans PDO
L'insertion efficace de données dans une base de données est cruciale, en particulier lorsqu'il s'agit de grands ensembles de données. Cette question explore la possibilité d'insérer plusieurs lignes à l'aide d'une seule instruction préparée dans l'extension PDO de PHP, pour optimiser le processus d'insertion.
Le problème :
Il est nécessaire de insérez plusieurs lignes dans une table en utilisant les données dynamiques d'un tableau. Une approche typique pour insérer une seule ligne à l'aide de PDO est démontrée :
$params = [ ':val1' => 'val1', ':val2' => 'val2', ':val3' => 'val3', ]; $sql = "INSERT INTO table VALUES (col1, col2, col3) VALUES (:val1, :val2, :val3)"; $stmt = DB::getInstance()->prepare($sql); $stmt->execute($params);
La réponse :
Pour insérer plusieurs lignes avec une seule instruction préparée, il est possible de construire une seule requête INSERT contenant plusieurs valeurs. Les paramètres sont transmis séparément pour garantir la sécurité et la flexibilité.
Exemple :
Étant donné un tableau de lignes à insérer :
$rows = [ ['abc', 'def', 'ghi'], ['abc', 'def', 'ghi'], ['abc', 'def', 'ghi'], ];
Ce qui suit le code crée une requête préparée avec des espaces réservés pour chaque ligne :
$row_length = count($rows[0]); $nb_rows = count($rows); $length = $nb_rows * $row_length; $args = implode(',', array_map( function($el) { return '('.implode(',', $el).')'; }, array_chunk(array_fill(0, $length, '?'), $row_length) )); $params = array(); foreach ($rows as $row) { foreach ($row as $value) { $params[] = $value; } } $query = "INSERT INTO Table (col1, col2, col3) VALUES " . $args; $stmt = DB::getInstance()->prepare($query); $stmt->execute($params);
Les valeurs de chaque ligne sont transmises en tant que paramètres séparément, maintenant la sécurité et permettant une insertion efficace de plusieurs lignes.
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!