处理SQLGrammarException:错误:tsquery中的语法错误:

时间:2014-03-13 21:40:03

标签: hibernate postgresql

当使用Hibernate和Postgres FTS时,tsquery似乎是合适的。但是,每当我尝试输入“'”或其他一些奇怪的字符组合时,似乎会出现主题异常。它甚至似乎都不接受两个字。如果用单引号括起字符串,则布尔运算符如|停止工作。我想知道是否还有处理这个异常。我已经为每一种方法添加了投掷,但它看起来像是撞在墙上。这是我的代码:

"SELECT FROM cat c where "+ args.get(0)+" @@ "+ "to_tsquery("+ args.get(1) + ")";

这就是Hibernate生成的内容。

"Hibernate: select fulltextse0_.name as name2_ from posts fulltextse0_ where 
  fulltextse0_.textsearchable_index_col @@ to_tsquery(?)=true order by 
    fulltextse0_.id asc limit ?"

arg0是fulltext字段的名称,arg1是从Web表单传递给它的字符串。

1 个答案:

答案 0 :(得分:2)

您的代码无法遵循SQL的基本正确做法,即:永远不要将用户提供的数据直接替换为SQL字符串。这将打开您SQL injection个洞,并且还会导致各种令人兴奋的错误。您已经发现了这些错误,谢天谢地,有人利用您的数据库。

Use parameterized statements