Maison >base de données >tutoriel mysql >Puis-je utiliser une seule instruction préparée pour insérer plusieurs lignes dans PDO ?

Puis-je utiliser une seule instruction préparée pour insérer plusieurs lignes dans PDO ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-11-06 21:18:02458parcourir

Can I Use a Single Prepared Statement to Insert Multiple Rows in 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!

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