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 ?
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 :
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 }
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!