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:
DSN-Konfiguration:
Datenbank- und Tabellenkonvertierung:
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>
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!