如何在 Golang 中使用 MySQL 動態排序
動態排序資料庫結果對於靈活的資料擷取至關重要。然而,當透過 Golang 的 db.Select() 方法使用 MySQL 時,嘗試使用佔位符進行排序可能會遇到挑戰。
問題:
在 ORDER 中使用佔位符BY子句與過濾器參數類似,通常會導致排序不成功,而沒有任何明顯的意義
解決方案:
雖然佔位符不能直接用於指定排序參數,但另一種方法是使用fmt.Sprintf() 動態組裝查詢文字。例如:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 | package main
import (
"fmt"
"log"
"regexp"
"github.com/go-sql-driver/mysql"
)
func main() {
db, err := mysql.Open( "mysql" , "username:password@tcp(localhost:3306)/database_name" )
if err != nil {
log.Fatal(err)
}
defer db.Close()
ordCol := "title"
valid := regexp.MustCompile( "^[A-Za-z0-9_]+$" )
if !valid.MatchString(ordCol) {
log.Fatalf( "Invalid column name: %s" , ordCol)
}
qtext := fmt.Sprintf( "SELECT * FROM Apps ORDER BY %s DESC" , ordCol)
rows, err := db.Query(qtext)
if err != nil {
log.Fatal(err)
}
defer rows.Close()
for rows.Next() {
}
}
|
登入後複製
安全注意事項:
動態組裝查詢字串時,防止 SQL 注入至關重要。如果查詢文字中包含使用者輸入,請務必驗證和清理使用者輸入。確保它不包含任何可能損害資料庫完整性的惡意字元或 SQL 語法。
以上是如何使用 db.Query() 動態排序 Go 中的 MySQL 結果?的詳細內容。更多資訊請關注PHP中文網其他相關文章!