SQL查询中的字符串通常由单引号括起来.例如.
INSERT INTO tbl (html) VALUES ('html');
但是如果HTML字符串本身也包含单引号,它将破坏SQL查询:
INSERT INTO tbl (html) VALUES ('
');您已经在语法高亮显示中看到它,SQL值在foo之前结束,并且SQL解释器无法理解之后的内容. SQL语法错误!
在构造SQL查询期间,您确实需要清理SQL.如何做取决于您用于执行SQL的编程语言.如果它是例如PHP,你将需要mysql_real_escape_string():
$sql = "INSERT INTO tbl (html) VALUES ('" . mysql_real_escape_string($html) . "')";
PHP中的替代方法是使用prepared statements,它将为您处理SQL转义.
String sql = "INSERT INTO tbl (html) VALUES (?)";
preparedStatement = connection.prepareStatement(sql);
preparedStatement.setString(1, html);
更新:事实证明你实际上在使用Java.您需要更改代码,如下所示:
String sql = "INSERT INTO website (URL, phishing, source_code, active) VALUES (?, ?, ?, ?)";
preparedStatement = connection.prepareStatement(sql);
preparedStatement.setString(1, URL);
preparedStatement.setString(2, phishingState);
preparedStatement.setString(3, sourceCode);
preparedStatement.setString(4, webSiteState);
preparedStatement.executeUpdate();
不要忘记正确处理JDBC资源.您可能会发现this article对于如何以正确的方式获取基本JDBC内容有所帮助.希望这可以帮助.