sql >> Databasteknik >  >> RDS >> Mysql

Lagra HTML i MySQL-databas

Strängar i en SQL-fråga är -vanligen- omgivna av enkla citattecken. T.ex.

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

Men om själva HTML-strängen också innehåller ett enskilt citat, skulle det bryta SQL-frågan:

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

Du ser det redan i syntaxmarkören, SQL-värdet slutar precis före foo och SQL-tolken kan inte förstå vad som kommer därefter. SQL-syntaxfel!

Men det är inte det enda, det ger också dörrarna vida öppen för SQL-injektioner (exempel här ).

Du måste verkligen rensa SQL under konstruera SQL-frågan. Hur man gör det beror på vilket programmeringsspråk du använder för att köra SQL. Om det till exempel är PHP, behöver du mysql_real_escape_string() :

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

Ett alternativ i PHP är att använda förberedda uttalanden , kommer den att hantera SQL-escape åt dig.

Om du använder Java (JDBC ), då behöver du PreparedStatement :

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

Uppdatera :det visar sig att du faktiskt använder Java. Du måste ändra koden enligt följande:

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();

Glöm inte att hantera JDBC-resurser på rätt sätt. Du kan hitta denna artikel användbar för att få lite insikter om hur man gör grundläggande JDBC-grejer på rätt sätt. Hoppas detta hjälper.



  1. Hur ser man loggfiler i MySQL?

  2. Hur mappar man en MySQL char(n)-kolumn till en instansvariabel med en JPA/Hibernate-anteckning?

  3. Hur ersätter man icke-numeriska tecken i MySQL?

  4. PostgreSQL hög tillgänglighet med Master-Slave &Master-Master-arkitekturer