Requêtes MySQL avec des variables SET dans Go
Arrière-plan :
L'utilisateur tente de exécutez une requête MySQL complexe à l'aide de Go qui implique la définition de variables utilisateur avant d'exécuter la requête. La requête s'exécute avec succès à partir de la console, mais elle échoue avec une erreur de syntaxe lorsqu'elle est exécutée via Go. L'utilisateur s'interroge sur la possibilité d'utiliser des variables SET avec la méthode Query() de Go.
Solution :
Le problème de l'utilisateur a été résolu en apportant les modifications suivantes :
Configuration DSN :
Conversion de base de données et de table :
Code :
Avec ces modifications, le code fourni par l'utilisateur devrait fonctionner comme prévu :
<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>
En modifiant la configuration DSN et en convertissant la base de données et les tables dans le classement approprié, l'utilisateur peut exécuter avec succès la requête en question tout en évitant l'erreur de syntaxe.
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!