Rumah > pembangunan bahagian belakang > Golang > Bagaimana untuk Memesan Keputusan MySQL Secara Dinamik dalam Go Menggunakan `db.Query()`?

Bagaimana untuk Memesan Keputusan MySQL Secara Dinamik dalam Go Menggunakan `db.Query()`?

Susan Sarandon
Lepaskan: 2024-12-23 05:47:31
asal
208 orang telah melayarinya

How to Dynamically Order MySQL Results in Go Using `db.Query()`?

Cara Memesan Secara Dinamik dalam Golang dengan MySQL

Mengisih hasil pangkalan data secara dinamik adalah penting untuk mendapatkan semula data. Walau bagaimanapun, apabila bekerja dengan MySQL melalui kaedah db.Select() Golang, percubaan untuk mengisih menggunakan ruang letak mungkin menghadapi cabaran.

Masalahnya:

Menggunakan ruang letak dalam ORDER Klausa BY, serupa dengan parameter penapis, selalunya membawa kepada pesanan yang tidak berjaya tanpa apa-apa yang jelas ralat.

Penyelesaian:

雖然 ruang letak tidak boleh digunakan untuk menentukan parameter isihan secara langsung, pendekatan alternatif melibatkan pemasangan teks pertanyaan secara dinamik menggunakan fmt.Sprintf(). Contohnya:

package main

import (
    "fmt"
    "log"
    "regexp"

    "github.com/go-sql-driver/mysql"
)

func main() {
    // Connect to the database.
    db, err := mysql.Open("mysql", "username:password@tcp(localhost:3306)/database_name")
    if err != nil {
        log.Fatal(err)
    }
    defer db.Close()

    // Get the column name to sort by from a user input.
    // For safety, sanitize the input using a regular expression or other appropriate method.
    ordCol := "title"

    // Check if the column name is valid for use in an ORDER BY clause.
    valid := regexp.MustCompile("^[A-Za-z0-9_]+$")
    if !valid.MatchString(ordCol) {
        log.Fatalf("Invalid column name: %s", ordCol)
    }

    // Create the dynamic query string.
    qtext := fmt.Sprintf("SELECT * FROM Apps ORDER BY %s DESC", ordCol)

    // Execute the query.
    rows, err := db.Query(qtext)
    if err != nil {
        log.Fatal(err)
    }
    defer rows.Close()

    // Iterate over the results.
    for rows.Next() {
        // Access column values here.
    }
}
Salin selepas log masuk

Pertimbangan Keselamatan:

Apabila memasang rentetan pertanyaan secara dinamik, adalah penting untuk melindungi daripada suntikan SQL. Sentiasa sahkan dan bersihkan input pengguna jika disertakan dalam teks pertanyaan. Pastikan ia tidak mengandungi sebarang aksara berniat jahat atau sintaks SQL yang boleh menjejaskan integriti pangkalan data.

Atas ialah kandungan terperinci Bagaimana untuk Memesan Keputusan MySQL Secara Dinamik dalam Go Menggunakan `db.Query()`?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan