Wie verwende ich SET-Variablen in Go MySQL-Abfragen?

Patricia Arquette
Freigeben: 2024-10-23 17:49:02
Original
395 Leute haben es durchsucht

How to Use SET Variables in Go MySQL Queries?

Go MySQL-Abfragen mit SET-Variablen verwenden

Sie versuchen, eine Go MySQL-Abfrage zu schreiben, die Variablen festlegt und diese in einem Komplex verwendet ORDER BY-Klausel. Die Abfrage wird erfolgreich in der Konsole ausgeführt, es tritt jedoch ein Syntaxfehler in Go auf.

Mögliche Lösung

Leider unterstützt das Datenbank-/SQL-Paket von Go derzeit nicht die Einstellung von MySQL-Benutzern. definierte Variablen. Daher ist der in der Frage beschriebene Ansatz mit den aktuellen Einschränkungen des Pakets nicht umsetzbar.

Alternative Ansätze

Dynamische Abfragegenerierung:

Eine Alternative besteht darin, die ORDER BY-Klausel basierend auf den Eingabeparametern dynamisch zu generieren, wodurch die Notwendigkeit einer Variablenersetzung entfällt.

<code class="go">func (d *DB) SelectByUserId(uid string, srt string, pg, lim int) ([]Inventory, error) {
    query := `
    SELECT
        *
    FROM
        inventory
    WHERE
        user_id = ?
    ORDER BY
        ` + generateOrderBy(srt) + `
    LIMIT ?,?;
    `

    rows, err := d.Query(
        query,
        uid,
        pg*lim,
        lim,
    )

    // ... (rest of the code remains the same)

    return result, nil
}

func generateOrderBy(srt string) string {
    order := ""
    switch srt {
    case "type,asc":
        order = "`type` ASC"
    case "type,desc":
        order = "`type` DESC"
    // ... (add other cases)
    }
    return order
}</code>
Nach dem Login kopieren

Parametererweiterung:

Alternativ können Sie das ? auch manuell erweitern. Platzhalter in der Abfragezeichenfolge, um die Notwendigkeit von Variablen zu vermeiden. Bei diesem Ansatz wird eine Zeichenfolge erstellt, die jedes „?“ ersetzt. mit dem entsprechenden Parameterwert.

<code class="go">func (d *DB) SelectByUserId(uid string, srt string, pg, lim int) ([]Inventory, error) {
    query := fmt.Sprintf(`
    SELECT
        *
    FROM
        inventory
    WHERE
        user_id = '%s'
    ORDER BY
        CASE WHEN '%s' = 'type,asc' THEN `type` END,
        CASE WHEN '%s' = 'type,desc' THEN `type` END DESC,
        CASE WHEN '%s' = 'visible,asc' THEN visible END,
        CASE WHEN '%s' = 'visible,desc' THEN visible END DESC,
        CASE WHEN '%s' = 'create_date,asc' THEN create_date END,
        CASE WHEN '%s' = 'create_date,desc' THEN create_date END DESC,
        CASE WHEN '%s' = 'update_date,asc' THEN update_date END,
        CASE WHEN '%s' = 'update_date,desc' THEN update_date END DESC
    LIMIT %d,%d;
    `, uid, srt, srt, srt, srt, srt, srt, srt, srt, pg*lim, lim)

    rows, err := d.Query(
        query,
    )

    // ... (rest of the code remains the same)

    return result, nil
}</code>
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonWie verwende ich SET-Variablen in Go MySQL-Abfragen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!