Le tri dynamique des résultats de la base de données est essentiel pour la récupération des données. Cependant, lorsque vous travaillez avec MySQL via la méthode db.Select() de Golang, les tentatives de tri à l'aide d'espaces réservés peuvent rencontrer des difficultés.
Le problème :
Utilisation d'espaces réservés dans ORDER La clause BY, similaire aux paramètres de filtre, conduit souvent à un échec de commande sans aucune erreur apparente.
La Solution :
Les espaces réservés 雖然 ne peuvent pas être utilisés pour spécifier directement les paramètres de tri, une approche alternative consiste à assembler dynamiquement le texte de la requête à l'aide de fmt.Sprintf(). Par exemple :
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. } }
Considérations de sécurité :
Lors de l'assemblage dynamique de chaînes de requête, il est crucial de se protéger contre l'injection SQL. Validez et nettoyez toujours les entrées de l’utilisateur si elles sont incluses dans le texte de la requête. Assurez-vous qu'il ne contient aucun caractère malveillant ni syntaxe SQL susceptible de compromettre l'intégrité de la base de données.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!