我似乎无法与db.Select()动态进行ORDER BY。我已经没有任何运气谷歌了…
作品
rows, err := db.Query("SELECT * FROM Apps ORDER BY title DESC")
不起作用
rows, err := db.Query("SELECT * FROM Apps ORDER BY ? DESC", "title")
我没有收到任何错误,查询只是无法排序。
占位符('?'
)仅可用于为WHERE
应在其中显示数据值的过滤器参数(例如,在零件中)插入动态的转义值,而不能用于SQL关键字,标识符等。您不能使用它来动态指定ORDER BY
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")) // true
fmt.Println(valid.MatchString("another_col_2")) // true
fmt.Println(valid.MatchString("it's a trap!")) // false
fmt.Println(valid.MatchString("(trap)")) // false
fmt.Println(valid.MatchString("also*trap")) // false
问题内容: 我不明白注释和之间的实际区别是什么? 扩展名还是它们具有完全不同的含义?什么时候应该使用它们?在服务层中使用Spring ,在DAO 中使用javax? 谢谢回答。 问题答案: 几年前,Spring定义了自己的Transactional注释以使Spring bean方法具有事务性。 Java EE 7终于做了同样的事情,现在除了EJB方法外,还允许CDI bean方法是事务性的。因此,
主要内容:前言,粘包,拆包前言 粘包问题:一个请求里面带有多个响应,多个消息粘再一起给你发送回来; 拆包问题:一个消息拆成多个请求发送回来; 粘包 其中 一直递归调用,最终处理粘包问题核心代码 拆包 50生产者|60如何处理 有两种地方可能会发生拆包: 消息体的size 消息体 1. 消息体的size 2. 消息体
我需要调用MySQL存储过程从我的python脚本。作为参数之一,我传递一个Unicode字符串(俄语),但我得到一个错误; UnicodeEncodeError:“latin-1”编解码器无法对位置0-1中的字符进行编码:序号不在范围(256)内 我的脚本: 我已经读过设置可以解决这个问题,但是当我使用字符串时: 这给了我另一个错误; UnicodeEncodeError:'utf-8'编解码器
为什么在例子中调用 time.sleep() 不会并发执行? 我的代码是异步的, 但它不能在两个浏览器标签页上并行运行. Many people’s first foray into Tornado’s concurrency looks something like this: class BadExampleHandler(RequestHandler): def get(self):
问题内容: 我只是开始玩GWT,我很难让GWT + JAVA + JDO + Google AppEngine与DataStore一起工作。我试图按照不同的教程学习,但是没有运气。例如,我喜欢这些教程:TUT1 TUT2 我无法弄清楚如何才能完成这项工作。请查看我的简单代码,并告诉我需要做什么,以便可以将其持久保存到数据存储区: 1.地址实体 2.个人实体 3. RPCCalls 4. RPCCa
我试图通过docker-compose文件部署kafka,或者通过安装kafka映像并手动运行它。当我开始运行kafka服务器(代理)时,这两个步骤都给我带来了错误 INFO初始化客户端连接,connectString=188.226.151.167:2181 sessiontimeout=6000 watcher=org.i0itec.zkclient.zkclient@323b36e0(org