【问题标题】:Concatenating a SQL string query in a JSP file在 JSP 文件中连接 SQL 字符串查询
【发布时间】:2016-04-24 18:50:19
【问题描述】:

我有一个 html 页面,允许用户输入特定的搜索词来查询我创建的数据库。我遇到的问题是,当我传递要作为 sql 查询执行的字符串时,它不会将查询用单引号括起来,这是在 sql 数据库中搜索字符串匹配所必需的。这是我目前的代码:

//Create a statement for the sql queries  
java.sql.Statement stmt = conn.createStatement();

//Get results from queries entered  
String result_event_name = request.getParameter("event_name");

//Create query string   
String sqlQuery_event  = "SELECT event_name FROM event where event_name = " + "\'" + result_event_name + "\'";

//execute query  
java.sql.ResultSet rs_event = stmt.executeQuery(sqlQuery_event);`

这是我得到的错误:

SQLException: ERROR: syntax error at end of input Position: 49

我尝试使用 prepare 语句 - 返回相同的错误
我尝试了没有转义的查询——返回相同的错误
我尝试不使用单引号 - 返回相同的错误

【问题讨论】:

  • try String sqlQuery_event = "SELECT event_name FROM event where event_name = " + "\\'" + result_event_name + "\\'";
  • 为什么要使用不推荐使用的东西,只是避免在 JSP 中使用模板编写代码。
  • 您可能还想了解准备好的语句以防止SQL injection

标签: java sql jsp


【解决方案1】:
  1. 单引号'只需要转义一次LIKE '%\'%'
  2. 但是要查询反斜杠\,您需要双重转义到LIKE '%\\\\%'
  3. 如果你想查询反斜杠+单引号\' 然后LIKE '%\\\\\'%' (带 5 个反斜杠)

Explanation Source摘录:

因为 MySQL 在字符串中使用 C 转义语法(例如,“\n” 代表换行符),您必须将您使用的任何“\”加倍 在 LIKE 字符串中。例如,要搜索“\n”,请将其指定为“\n”。 要搜索“\”,请将其指定为“\”;这是因为反斜杠 被解析器剥离一次,当模式匹配时再次剥离 做了,留下一个反斜杠来匹配。

归功于xchiltonx

资源链接:

mysql - How to handle query search with special characters /(forward slash) and \(backslash)

【讨论】:

    猜你喜欢
    • 2014-11-14
    • 2014-12-07
    • 1970-01-01
    • 2019-01-21
    • 1970-01-01
    • 2010-09-22
    • 2023-01-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多