带有 LIKE '%?%' 的 SQL 准备语句

标签 sql sqlite

我在我的应用程序中实现了一个搜索功能,我希望它是“智能的”。搜索变成 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/

相关文章:

sql - 如何执行 SP 并根据其结果执行另一个查询,如果失败应恢复 SP 所做的操作?

sql - 在 Postgresql 中合并 2 条记录(变量)以返回它们

mysql - 如何避免程序中出现 "Illegal mix of collations for operation ' concat'"

java - OneToMany 无法确定 SpringBoot/SQLite3 的类型

sql - GROUP BY 时间到一天 24 小时

mysql - SQL 根据时间戳和库存水平连接同一个表

.net - sqlite-net 日期时间检索

iphone - 在 iPhone 上实现全文搜索?

java - sqlite 数据库错误 : sqlite returned: error code = 1, msg = 没有这样的列:ph_number

java - SQL异常 : no such table