栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

Golang ORDER BY问题与MySql

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Golang ORDER BY问题与MySql

占位符(

'?'
)仅可用于为
WHERe
应在其中显示数据值的过滤器参数(例如,在零件中)插入动态的转义值,而不能用于SQL关键字,标识符等。您不能使用它来动态指定
ORDERBY
OR
GROUP BY
值。

不过,您仍然可以执行此操作,例如,可以使用以下方式

fmt.Sprintf()
来组装动态查询文本:

ordCol := "title"qtext := fmt.Sprintf("SELECt * FROM Apps ORDER BY %s DESC", ordCol)rows, err := db.Query(qtext)

注意事项:

这样做,您将必须手动防御SQL注入,例如,如果列名的值来自用户,则您不能接受任何值,而只能将其直接插入查询中,否则用户将能够做各种不好的事情的东西。通常,您只应接受英文字母+数字+下划线(

'_'
)的字母。

无需尝试提供完整的,全面的检查程序或转义功能,您可以使用此简单的正则表达式,该正则表达式仅接受英文字母,数字和

'_'

valid := regexp.MustCompile("^[A-Za-z0-9_]+$")if !valid.MatchString(ordCol) {    // invalid column name, do not proceed in order to prevent SQL injection}

示例(在Go Playground上尝试):

fmt.Println(valid.MatchString("title"))         // truefmt.Println(valid.MatchString("another_col_2")) // truefmt.Println(valid.MatchString("it's a trap!"))  // falsefmt.Println(valid.MatchString("(trap)"))        // falsefmt.Println(valid.MatchString("also*trap"))     // false


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/421227.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号