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
Libérer: 2024-11-06 21:18:02
original
464 Les gens l'ont consulté

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);
Copier après la connexion

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'],
];
Copier après la connexion

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);
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal