使用预准备语句搜索包含特定文本的条目

时间:2016-05-20 06:59:34

标签: postgresql

如果我有一个包含文字的表格

create table my_table(
    id integer primary key,
    para text
);

我想选择包含特定字段的所有条目

SELECT * FROM my_table WHERE text LIKE '%searchtext%';

所以它会给我所有包含“searchtext”的字段。在postgresql中是否有像contain(...)这样的聚合函数/过程来执行相同的操作。

SELECT * FROM my_table WHERE contains(text, 'searchtext');

我想要上面的行为,因为我正在使用预准备语句来提供参数,例如字符串,例如WHERE text = ?然后我在?

的位置提供参数

1 个答案:

答案 0 :(得分:1)

要在PreparedStatement中使用带有参数的通配符,您需要将该参数值与通配符连接:

SELECT * 
FROM my_table 
WHERE para LIKE concat('%', ?, '%');

以上易受SQL注入攻击。即使您确实将abc%' OR '%def作为参数传递,使用的条件也是LIKE '%abc%'' OR ''%def'

另一种可能性是使用strpos()

SELECT * 
FROM my_table 
WHERE strpos(para, ?) > 0;