具有LIKE'%?%'的SQL预准备语句

时间:2018-08-15 11:18:46

标签: 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注入攻击的发生方式。相反,您应该使用绑定:

sql="insert into example values(?, ?)"
cursor.execute(sql, ("string", 8390823904))

3 个答案:

答案 0 :(得分:1)

您不能在由单引号引起来的字符串中使用单引号而不将其转义,但是可以在双引号分隔的字符串中使用。 像

query = "SELECT * FROM varer WHERE navn LIKE '%?%' "

应该解决您的问题。

答案 1 :(得分:0)

我认为您需要简单的like运算符使用

CREATE TABLE t
(
id           int, 
Name              varchar(100) 
);

insert into t values(1,  'litago'),
(2,      'litago 500ml'),
(3,      'Small litago'),
(4,      'litago 375ml'),
(5,      'johb');

postgresql示例,它适用于所有sql

 select * from t where name like'%litago%' 

此查询的结果

id  name
1   litago
2   litago 500ml
3   Small litago
4   litago 375ml

http://sqlfiddle.com/#!17/57ab63/1

在python中,您的陈述应类似于

query = "SELECT * FROM varer WHERE navn LIKE '%?%' "

答案 2 :(得分:0)

这将起作用:

SELECT * FROM varer WHERE navn LIKE '%litago%'