Maison > base de données > tutoriel mysql > le corps du texte

Comment insérer plusieurs lignes dans une base de données à l'aide d'instructions préparées en PHP ?

Linda Hamilton
Libérer: 2024-11-09 17:14:02
original
657 Les gens l'ont consulté

How to Insert Multiple Rows into a Database Using Prepared Statements in PHP?

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

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

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

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
    // ...
}
Copier après la connexion

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

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!

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