簡體   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