Maison > développement back-end > Golang > Comment trier dynamiquement les résultats MySQL en Go à l'aide de « db.Query() » ?

Comment trier dynamiquement les résultats MySQL en Go à l'aide de « db.Query() » ?

Susan Sarandon
Libérer: 2024-12-23 05:47:31
original
208 Les gens l'ont consulté

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

Comment trier dynamiquement dans Golang avec MySQL

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.
    }
}
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal