2010-04-14 54 views
0

我试图存储String包含HTML使用Longtext数据类型的MySQL数据库。但它总是说“你的SQL语法有错误”。我试图存储一个正常的String,它的工作原理。商店HTML到MySQL数据库

更新

这是查询:

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

我使用Java。

+1

机会是你不逃避你的文本。你用什么语言与mySQL交互? – timdev 2010-04-14 22:46:29

回答

1

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

1

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

我假定有需要转义的HTML字符串,也许你错过了某些部分?

2

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

8

SQL查询中的字符串通常由单引号包围。例如。

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

但是,如果HTML字符串包含一个singlequote中,也将打破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

虽然使用准备好的语句可以防止你进行sql注入,但当你将它拉出并再次显示时,切记要避开HTML!如果你不这样做,你会很容易受到各种xss攻击。 – nos 2010-04-14 23:19:17

+0

@nos:完全正确。然而,这是一个故事。看到编码(变量名称)到目前为止,我期望它被用于完全不同的目的,虽然:) @ jouzef19:如果这个HTML来自*用户输入*,你是*永远*将显示在一个JSP页面,然后使用['fn:escapeXml()'](http://java.sun.com/products/jsp/jstl/1.1/docs/tlddocs/fn/escapeXml.fn.html)来清理它避免[XSS攻击](http://en.wikipedia.org/wiki/Cross-site_scripting) - [这里的例子](http://ha.ckers.org/xss.html)。 – BalusC 2010-04-14 23:22:09