这是我当前的 SQL 语句:
SEARCH_ALBUMS_SQL = "SELECT * FROM albums WHERE title LIKE ? OR artist LIKE ?;";
它返回专辑或艺术家名称的完全匹配,但不返回其他内容。如果在语句中使用“%”,则会出现错误。
如何向准备好的语句添加通配符?
(我正在使用Java5和MySQL)
谢谢!
这是我当前的 SQL 语句:
SEARCH_ALBUMS_SQL = "SELECT * FROM albums WHERE title LIKE ? OR artist LIKE ?;";
它返回专辑或艺术家名称的完全匹配,但不返回其他内容。如果在语句中使用“%”,则会出现错误。
如何向准备好的语句添加通配符?
(我正在使用Java5和MySQL)
谢谢!
你将 % 放在绑定变量中。因此,你这样做
stmt.setString(1, "%" + likeSanitize(title) + "%");
stmt.setString(2, "%" + likeSanitize(artist) + "%");
你应该添加ESCAPE '!' ,以允许你在输入中转义对LIKE有影响的特殊字符。
在使用title或artist之前,你应该通过像上面展示的方法转义特殊字符(!,%,_和[)来对它们进行净化。
public static String likeSanitize(String input) {
return input
.replace("!", "!!")
.replace("%", "!%")
.replace("_", "!_")
.replace("[", "![");
}
!_
,并将[替换为![**,则可以在很大程度上减轻此处的SQL注入风险。 - Alain O'Dea_
被视为除了字面上的_
之外的其他东西吗? - Paul Tomblin