Cách SELECT dữ liệu từ database MySQL bằng Golang
Hướng dẫn cách sử dụng Golang để truy vấn dữ liệu từ MySQL database bằng Prepared Statements với nhiều tham số.
Trong bài viết này, bạn sẽ học cách sử dụng Golang để kết nối với MySQL và thực hiện truy vấn SELECT bằng Prepared Statements với nhiều tham số, giúp tăng hiệu suất và bảo mật.
package main
import (
"database/sql"
"fmt"
"log"
_ "github.com/go-sql-driver/mysql"
)
func main() {
// Kết nối tới database MySQL
dsn := "root:password@tcp(127.0.0.1:3306)/test_db"
db, err := sql.Open("mysql", dsn)
if err != nil {
log.Fatal(err)
}
defer db.Close()
// Kiểm tra kết nối
err = db.Ping()
if err != nil {
log.Fatal(err)
}
// Sử dụng Prepared Statement với multi params
stmt, err := db.Prepare("SELECT id, name, age FROM students WHERE age > ? AND age < ?")
if err != nil {
log.Fatal(err)
}
defer stmt.Close()
// Thực hiện truy vấn với các tham số
rows, err := stmt.Query(18, 25)
if err != nil {
log.Fatal(err)
}
defer rows.Close()
// Duyệt qua kết quả truy vấn
for rows.Next() {
var id int
var name string
var age int
err := rows.Scan(&id, &name, &age)
if err != nil {
log.Fatal(err)
}
fmt.Printf("ID: %d, Name: %s, Age: %d\n", id, name, age)
}
// Kiểm tra lỗi sau khi duyệt qua các hàng dữ liệu
if err = rows.Err(); err != nil {
log.Fatal(err)
}
}
Giải thích chi tiết từng dòng code:
import
phần khai báo các package cần thiết cho chương trình.sql.Open("mysql", dsn)
: Mở kết nối đến MySQL database với thông tin được truyền vào nhưdsn
.db.Prepare(...)
: Tạo một Prepared Statement với câu lệnh SELECT và các tham số.stmt.Query(18, 25)
: Thực hiện truy vấn với các tham số đã được truyền vào.rows.Next()
: Duyệt qua từng hàng của kết quả truy vấn.rows.Scan(...)
: Lấy dữ liệu từ hàng hiện tại và gán vào các biến.fmt.Printf
: In dữ liệu ra màn hình.
Yêu cầu hệ thống:
- Golang 1.16+
- Thư viện MySQL Driver:
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:
go get -u github.com/go-sql-driver/mysql
Lời khuyên:
- Sử dụng Prepared Statements giúp tránh SQL Injection và cải thiện hiệu suất.
- Kiểm tra kết nối đến database trước khi thực hiện các thao tác.