Go 中使用SET 變數進行MySQL 查詢
背景:
使用者正在嘗試使用🎜>背景:
使用者正在嘗試使用Go 執行複雜的MySQL 查詢,其中涉及在執行查詢之前設定使用者變數。該查詢從控制台成功執行,但在透過 Go 執行時失敗並出現語法錯誤。使用者質疑 Go 的 Query() 方法中使用 SET 變數的可能性。
解決方案:
代碼:
<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>
透過這些修改,使用者提供的程式碼應該可以運作如預期的:
透過修改DSN 配置並將資料庫和表轉換為適當的排序規則,使用者可以成功執行相關查詢,同時避免語法錯誤。以上是使用 Go 的 Query() 方法時可以使用 SET 變數執行 MySQL 查詢嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!