Cách INSERT dữ liệu vào database MySQL bằng Golang
Hướng dẫn cách sử dụng Prepared Statements trong Golang để thực hiện thao tác INSERT dữ liệu vào database MySQL với nhiều tham số.
Trong bài viết này, bạn sẽ học cách sử dụng Prepared Statements trong Golang để chèn dữ liệu vào bảng MySQL với nhiều tham số, giúp tăng hiệu suất và bảo mật khi xử lý dữ liệu.
package main
import (
"database/sql"
"fmt"
"log"
_ "github.com/go-sql-driver/mysql"
)
func main() {
// Kết nối tới database MySQL
db, err := sql.Open("mysql", "username:password@tcp(127.0.0.1:3306)/test_db")
if err != nil {
log.Fatal(err)
}
defer db.Close()
// Kiểm tra kết nối
if err := db.Ping(); err != nil {
log.Fatal(err)
}
// Chuẩn bị câu lệnh INSERT với nhiều tham số
stmt, err := db.Prepare("INSERT INTO students(name, age, email) VALUES (?, ?, ?)")
if err != nil {
log.Fatal(err)
}
defer stmt.Close()
// Thực hiện chèn dữ liệu
data := [][]interface{}{
{"Nguyen Van A", 20, "[email protected]"},
{"Tran Thi B", 22, "[email protected]"},
{"Le Van C", 21, "[email protected]"},
}
for _, record := range data {
_, err = stmt.Exec(record...)
if err != nil {
log.Printf("Error inserting record %v: %v", record, err)
} else {
fmt.Printf("Inserted record: %v\n", record)
}
}
}
Giải thích chi tiết từng dòng code:
import
: Import các gói cần thiết, bao gồmdatabase/sql
vàgithub.com/go-sql-driver/mysql
cho kết nối MySQL.sql.Open("mysql", "username:password@tcp(127.0.0.1:3306)/test_db")
: Kết nối đến database MySQL với thông tin người dùng, mật khẩu và địa chỉ.db.Ping()
: Kiểm tra kết nối đến database.db.Prepare(...)
: Chuẩn bị câu lệnh INSERT với nhiều tham số (?
) để tránh SQL injection.data := [][]interface{}{...}
: Tạo dữ liệu mẫu cần chèn với nhiều tham số.stmt.Exec(record...)
: Thực hiện câu lệnh INSERT với dữ liệu từrecord
.
Yêu cầu hệ thống:
- Golang 1.15+
- Thư viện:
github.com/go-sql-driver/mysql
Cách cài đặt các thư viện để chạy được đoạn mã Golang trên:
Sử dụng lệnh sau để cài đặt thư viện MySQL driver:
go get -u github.com/go-sql-driver/mysql
Lời khuyên:
- Sử dụng Prepared Statements giúp bảo mật hơn và tránh các cuộc tấn công SQL injection.
- Đảm bảo kiểm tra lỗi cẩn thận ở mỗi bước để phát hiện vấn đề sớm.