我在我的应用程序中实现了一个搜索功能,我希望它是“智能的”。搜索变成 SQL-query
.
我想要以下功能:搜索“litago”将显示“litago 500ml”、“litago 375ml”、“Small litago”、“superlitago223”
即 'ANY_STRING_HERE'+'litago'+'ANY_STRING_HERE'
我想在 SQL query
中执行此操作像这样:
query = 'SELECT * FROM varer WHERE navn LIKE '%?%' '
?
是用户输入,litago
只是一个例子但是,这给出了
syntax error
.有没有办法做到这一点?编辑:使用 python 3.6.4,这里是 relevant code
来自 rogerbinns github :
有两种方法可以向查询提供数据。真正糟糕的方法是组成一个字符串:
sql="insert into example values('%s', %d)" % ("string", 8390823904)
cursor.execute(sql)
如果字符串中有任何单引号,那么您的语法将无效。此外,这就是 SQL 注入(inject)攻击的发生方式。相反,您应该使用绑定(bind):
sql="insert into example values(?, ?)"
cursor.execute(sql, ("string", 8390823904))
最佳答案
您不能在由单引号分隔的字符串中使用单引号而不转义它们,但是您可以在双引号分隔的字符串中使用。
就像是
query = "SELECT * FROM varer WHERE navn LIKE '%?%' "
应该可以解决您的问题。
关于带有 LIKE '%?%' 的 SQL 准备语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51857702/