将HTML存储到MySQL数据库中

jou*_*f19 0 html java mysql jdbc longtext

我正在尝试String使用Longtext数据类型在MySQL数据库中存储包含HTML的内容.但它总是说"你的SQL语法有错误".我试图存储一个正常String,它的工作原理.

更新:

这是查询:

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

我正在使用Java.

Bal*_*usC 8

SQL查询中的字符串通常由单引号括起来.例如

INSERT INTO tbl (html) VALUES ('html');
Run Code Online (Sandbox Code Playgroud)

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

INSERT INTO tbl (html) VALUES ('<form onsubmit="validate('foo', 'bar')">');
Run Code Online (Sandbox Code Playgroud)

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

但是,这不是唯一的,它也让门打开SQL注入(例子在这里).

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

$sql = "INSERT INTO tbl (html) VALUES ('" . mysql_real_escape_string($html) . "')";
Run Code Online (Sandbox Code Playgroud)

PHP中的另一种选择是使用预处理语句,它将为您处理SQL转义.

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

String sql = "INSERT INTO tbl (html) VALUES (?)";
preparedStatement = connection.prepareStatement(sql);
preparedStatement.setString(1, html);
Run Code Online (Sandbox Code Playgroud)

更新:事实证明你实际上在使用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();
Run Code Online (Sandbox Code Playgroud)

不要忘记正确处理JDBC资源.您可能会发现本文非常有用,可以获得有关如何以正确方式执行基本JDBC操作的一些见解.希望这可以帮助.