データベースの結果を動的に並べ替えることは、灵活なデータ取得には不可欠です。ただし、Golang の db.Select() メソッドを通じて MySQL を操作する場合、プレースホルダーを使用して並べ替えようとすると問題が発生する可能性があります。
問題:
ORDER でのプレースホルダーの使用BY 句は、フィルタ パラメータと同様に、明らかな問題がないまま順序付けが失敗することがよくあります。エラー。
解決策:
ただし、プレースホルダーを使用して並べ替えパラメータを直接指定することはできません。別の方法として、fmt.Sprintf() を使用してクエリ テキストを動的に組み立てる方法があります。例:
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. } }
セキュリティに関する考慮事項:
クエリ文字列を動的に組み立てる場合、SQL インジェクションから保護することが重要です。ユーザー入力がクエリ テキストに含まれている場合は、常に検証してサニタイズします。データベースの整合性を損なう可能性のある悪意のある文字や SQL 構文が含まれていないことを確認してください。
以上がGo で「db.Query()」を使用して MySQL の結果を動的に並べ替える方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。