Können Sie MySQL-Abfragen mit SET-Variablen ausführen, wenn Sie die Query()-Methode von Go verwenden?

Susan Sarandon
Freigeben: 2024-10-24 02:37:02
Original
352 Leute haben es durchsucht

Can You Execute MySQL Queries with SET Variables when Using Go's Query() Method?

MySQL-Abfragen mit SET-Variablen in Go

Hintergrund:

Der Benutzer versucht es Führen Sie eine komplexe MySQL-Abfrage mit Go aus, bei der Sie vor dem Ausführen der Abfrage Benutzervariablen festlegen müssen. Die Abfrage wird erfolgreich über die Konsole ausgeführt, schlägt jedoch bei der Ausführung über Go mit einem Syntaxfehler fehl. Der Benutzer stellt die Möglichkeit in Frage, SET-Variablen mit der Query()-Methode von Go zu verwenden.

Lösung:

Das Problem des Benutzers wurde durch die folgenden Änderungen gelöst:

  1. DSN-Konfiguration:

    • ?multiStatements=true&interpolateParams=true zum DSN hinzugefügt, der beim Herstellen einer Verbindung zur Datenbank verwendet wird. Dies ermöglicht die Ausführung mehrerer Anweisungen in einem einzigen Aufruf und ermöglicht die Parameterinterpolation.
  2. Datenbank- und Tabellenkonvertierung:

    • Die Datenbank und die relevanten Tabellen wurden in die Sortierung utf8mb4_general_ci konvertiert. Dadurch wurde ein Fehler im Zusammenhang mit einer Sortierungsinkongruenz behoben.

Code:

Mit diesen Änderungen sollte der vom Benutzer bereitgestellte Code funktionieren wie erwartet:

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

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

    if err != nil {
        return nil, err
    }
    defer rows.Close()

    result := make([]Inventory, 0)
    for rows.Next() {
        var inv Inventory
        if err := rows.Scan(
            &inv.Id,
            &inv.UserId,
            &inv.Type,
            &inv.Name,
            &inv.Description,
            &inv.Visible,
            &inv.CreateDate,
            &inv.UpdateDate); err != nil {
            return result, err
        }
        result = append(result, inv)
    }
    if err = rows.Err(); err != nil {
        return result, err
    }

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

Durch Ändern der DSN-Konfiguration und Konvertieren der Datenbank und Tabellen in die entsprechende Sortierung kann der Benutzer die betreffende Abfrage erfolgreich ausführen und gleichzeitig den Syntaxfehler vermeiden.

Das obige ist der detaillierte Inhalt vonKönnen Sie MySQL-Abfragen mit SET-Variablen ausführen, wenn Sie die Query()-Methode von Go verwenden?. 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!