我有像这样的MYSQL查询
String query="select DISTINCT sctName from snomedicd10map where sctName Like '" + search + "%" + "' LIMIT 5 ";
这个查询是自动完成的,如果我在输入撇号(')零点异常时搜索像代码,女孩等的单词
我怎样才能克服这一点。当用户在文本字段中输入带有撇号(')的名称时,它应该获取结果。
我从mysql数据库中获取结果。
我怎样才能做到这一点。
答案 0 :(得分:0)
通常当您使用硬编码的名称时,您可以重复并逃避
<div ng-controller="ListController as listCtrl">
<md-card>
<md-card-content>
<h2>Bookmarks</h2>
<md-list>
<md-list-item ng-repeat="bookmark in listCtrl.bookmarks">
<md-item-content>
<div class="md-tile-content">
<p>{[{ bookmark.name }]} - {[{ bookmark.url }]}</p> // used interpolateProvider to allow "{[{" instead of "{{"
</div>
<md-divider ng-if="!$last"></md-divider>
</md-item-content>
</md-list-item>
</md-list>
</md-card-content>
</md-card>
</div>
如果您正在接受清理字符串或使用参数化查询。查看准备好的语句。
答案 1 :(得分:0)
您应该使用PreparedStatement
,因此它会为您处理转义。例如:
try (PreparedStatement pstmt = Connection.prepareStatement("select DISTINCT sctName from snomedicd10map where sctName Like concat(?, '%') LIMIT 5") {
pstmt.setString(1, search);
try (ResultSet rs = pstmt.executeQuery()) {
// process result
}
}
或者(在代码中处理通配符):
try (PreparedStatement pstmt = Connection.prepareStatement("select DISTINCT sctName from snomedicd10map where sctName Like ? LIMIT 5") {
pstmt.setString(1, search + "%");
try (ResultSet rs = pstmt.executeQuery()) {
// process result
}
}
JDBC驱动程序将自动处理转义(或以不需要转义的方式发送参数)
答案 2 :(得分:-1)
这是我在原始评论中提出的建议,是你尝试过的吗?
String query="select DISTINCT sctName from snomedicd10map where sctName Like '"
+ search.replaceAll("'", "\'") + "%' LIMIT 5 ";