繁体   English   中英

将HTML存储到MySQL数据库中

[英]Store HTML into MySQL database

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

更新

这是查询:

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

我正在使用Java。

SQL查询中的字符串通常用单引号引起来。 例如

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

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

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

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

但是,这不是唯一的,但也可能使阖的SQL注入例子在这里 )。

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

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

PHP中的一种替代方法是使用预处理语句 ,它将为您处理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资源。 您可能会发现本文很有用,可以帮助您深入了解如何以正确的方式进行基本的JDBC操作。 希望这可以帮助。

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

您需要先对字符串进行转义,然后再将其插入数据库。

不见查询就很难说。 你可以张贴吗?

我假设html字符串的某些部分需要转义,也许您错过了?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM