Maison >développement back-end >Golang >Comment puis-je insérer efficacement plusieurs lignes de données dans une base de données Go à l'aide d'instructions préparées ?

Comment puis-je insérer efficacement plusieurs lignes de données dans une base de données Go à l'aide d'instructions préparées ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-12-23 01:36:26782parcourir

How Can I Efficiently Insert Multiple Rows of Data into a Go Database Using Prepared Statements?

Insertion efficace de plusieurs données dans Go

L'insertion de plusieurs lignes de données dans une base de données en une seule opération peut améliorer considérablement l'efficacité. Dans Go, une façon courante d'y parvenir consiste à utiliser des instructions préparées. Bien que l'utilisation de la concaténation de chaînes comme démontré dans votre question puisse sembler pratique, elle est moins sécurisée et peut conduire à des vulnérabilités d'injection SQL.

Utilisation d'instructions préparées

Pour insérer plusieurs lignes à l'aide déclarations préparées, vous pouvez suivre ces étapes :

  1. Créer un modèle d'instruction SQL avec des espaces réservés pour les données valeurs :
INSERT INTO test(n1, n2, n3) VALUES (?, ?, ?)
  1. Préparez l'instruction à l'aide de la méthode db.Prepare :
stmt, err := db.Prepare(sqlStr)
if err != nil {
    // Handle error
}
  1. Construisez une tranche de valeurs pour chaque ligne :
vals := []interface{}{}

for _, dataRow := range data {
    vals = append(vals, dataRow["v1"], dataRow["v2"], dataRow["v3"])
}
  1. Exécutez l'instruction avec le valeurs :
res, err := stmt.Exec(vals...)
if err != nil {
    // Handle error
}

Cette approche garantit que l'instruction SQL n'est analysée qu'une seule fois et que les valeurs sont insérées en toute sécurité en tant que paramètres.

Exemple :

Voici un exemple d'insertion de plusieurs lignes dans une table « test » à l'aide d'instructions préparées :

import (
    "database/sql"
    "fmt"
)

type DataRow struct {
    v1 string
    v2 string
    v3 string
}

func main() {
    data := []DataRow{
        {v1: "1", v2: "1", v3: "1"},
        {v1: "2", v2: "2", v3: "2"},
        {v1: "3", v2: "3", v3: "3"},
    }

    db, err := sql.Open("mysql", "user:password@tcp(localhost:3306)/database")
    if err != nil {
        // Handle error
    }

    sqlStr := "INSERT INTO test(n1, n2, n3) VALUES (?, ?, ?)"
    stmt, err := db.Prepare(sqlStr)
    if err != nil {
        // Handle error
    }

    vals := []interface{}{}
    for _, dataRow := range data {
        vals = append(vals, dataRow.v1, dataRow.v2, dataRow.v3)
    }

    res, err := stmt.Exec(vals...)
    if err != nil {
        // Handle error
    }

    affectedRows, err := res.RowsAffected()
    if err != nil {
        // Handle error
    }

    fmt.Printf("Inserted %d rows", affectedRows)
}

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