将HTML存储到MySQL数据库中

时间:2010-04-14 22:44:06

标签: java mysql html jdbc longtext

我正在尝试使用String数据类型在MySQL数据库中存储包含HTML的Longtext。但它总是说“你的SQL语法有错误”。我试图存储一个普通的String,但它确实有效。

更新

这是查询:

st.executeUpdate("insert into website(URL,phishing,source_code,active) values('" + URL + "','" + phishingState + "','" + sourceCode + "','" + webSiteState + "');");

我正在使用Java。

4 个答案:

答案 0 :(得分:8)

SQL查询中的字符串通常由单引号括起来。 E.g。

INSERT INTO tbl (html) VALUES ('html');

但是如果HTML字符串本身也包含单引号,它将破坏SQL查询:

INSERT INTO tbl (html) VALUES ('<form onsubmit="validate('foo', 'bar')">');

您已经在语法高亮显示中看到它,SQL值在foo之前结束,并且SQL解释器无法理解之后的内容。 SQL语法错误!

但这不是唯一的,它还为SQL injectionsexamples here)打开门。

在构建SQL查询期间,您确实需要清理SQL 。如何做到这取决于您用于执行SQL的编程语言。如果是例如PHP,则需要mysql_real_escape_string()

$sql = "INSERT INTO tbl (html) VALUES ('" . mysql_real_escape_string($html) . "')";

PHP中的替代方法是使用prepared statements,它将为您处理SQL转义。

如果您使用的是Java(JDBC),那么您需要PreparedStatement

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内容的一些见解非常有用。希望这会有所帮助。

答案 1 :(得分:2)

尝试在要存储的字符串上使用mysql_real_escape_string函数。这是最简单的方法。

答案 2 :(得分:1)

在将字符串插入数据库之前,您需要转义它。

答案 3 :(得分:1)

很难说没有看到查询。你可以发布吗?

我认为html字符串的某些部分需要转义,也许你错过了?