我正在寻找一种用Java转义MySQL查询的字符串的方法。
但等一下,在你们中的一些人直接下结论说“事先准备好的声明”之前,我想再解释一下。
似乎没有任何现有的lib/framework可以做这样的事情。所以我想一个简单的string
操作器就可以了?
class xxx {
private String escapeStringForMySQL(String s) {
return s.replaceAll("\\", "\\\\")
.replaceAll("\b","\\b")
.replaceAll("\n","\\n")
.replaceAll("\r", "\\r")
.replaceAll("\t", "\\t")
.replaceAll("\\x1A", "\\Z")
.replaceAll("\\x00", "\\0")
.replaceAll("'", "\\'")
.replaceAll("\"", "\\\"");
}
private String escapeWildcardsForMySQL(String s) {
return escapeStringForMySQL(s)
.replaceAll("%", "\\%")
.replaceAll("_","\\_");
}
}
问题内容: 我知道准备好的语句的功能,但是我不能在这里使用它。我通过HTTP(而不是通过JDBC)将sql查询发送到外部服务器。如何对SQL查询进行转义字符串?有没有办法通过JDBC做到这一点?还是我应该为此使用自定义类/函数? ps另外,我已经连接到其他数据库,因此可以使用JDBC函数。 问题答案: 这听起来很不安全。如果要通过HTTP发送SQL语句,则可能会受到中间人攻击(以及其他攻击)的危害
问题内容: 我想创建一个JDBC PreparedStatement,例如: 其中第一个是文字,第二个是参数。我可以代替,但我认为额外的函数调用会减慢SQL的执行速度。有什么办法可以逃脱第一个? 编辑: 以下代码测试dkatzel的断言:字符串中的字符不被视为标记: 输出: 看来dkatzel是正确的。我搜索了JDBC Spec ,但没有发现 参数标记如果在引号内将被忽略,但是我发现的Prepar
问题内容: 我正在使用准备好的语句来执行mysql数据库查询。我想实现基于各种关键字的搜索功能。 为此,我需要使用关键字,这一点我知道很多。而且我之前也使用过预处理语句,但是我不知道如何使用它,因为从以下代码中,我将在哪里添加? 我可以直接在或类似的东西中使用它吗?我在网络上看到很多帖子,但在任何地方都没有好的答案。 问题答案: 你需要在值本身中而不是在准备好的语句SQL字符串中进行设置。 因此,
问题内容: 我使用准备好的语句编写了select语句。每次尝试运行时都会出现此错误。我如何克服这个错误?我的jdbc连接器是mysql-connector- java-5.1.13-bin.jar。我的代码: 错误代码.. 2013年10月1日,下午1:23:23 sanin.lands.model.View_ads_cls getAdDetail 问题答案: 错误在这一行 这样做
这是我的代码:
问题内容: 在PDO :: Prepare页上指出: “并且通过消除对参数的手动引用来帮助防止SQL注入攻击” 知道这一点,是否有一个像mysql_real_escape_string()这样的PHP函数可以照顾到PDO的转义?还是PDO会为我做好一切转义? 编辑 我现在意识到我问了一个错误的问题。我的问题确实是,“ PDO会为我做什么?” 我现在通过这些答案意识到,它实际上仅消除了对引号进行转义