我有一个LIKE子句使用%
通配符的SQL查询。 我读过LIKE子句可能有问题,如下所示:http://githubengineering.com/like-injection/。 但我不确定在某些用户输入(尽管查询本质上是相同的)下面的两个不同的函数调用之间会有性能差异,并且它们之间的差异与所讨论的链接。使用LIKE子句正确格式化sql查询
我预计对第一个函数的调用只会返回类似于“& my-query%”的结果,因此字面上用户的输入会被两个百分号表示,但事实并非如此。
(query db ["SELECT * FROM some_table WHERE some_value LIKE ?"
(str "%" user-input "%")])
(query db ["SELECT * FROM some_table WHERE some_value LIKE '%' ? '%']"
user-input])
任何字符串串联涉及用户输入构建SQL是一个安全隐患 - 总是用准备好的语句设置用户提供的参数。 – BarrySW19