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. } }
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!