Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Przechowuj HTML w bazie danych MySQL

Łańcuchy w zapytaniu SQL są -zazwyczaj- ujęte w pojedyncze cudzysłowy. Np.

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

Ale jeśli sam ciąg HTML zawiera również pojedynczy cudzysłów, spowoduje to przerwanie zapytania SQL:

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

Widzisz to już w podświetlaczu składni, wartość SQL kończy się tuż przed foo a interpreter SQL nie może zrozumieć, co nastąpi później. Błąd składni SQL!

Ale to nie jedyne, to także sprawia, że ​​drzwi są szerokie otwarte dla wstrzyknięć SQL (przykłady tutaj ).

Naprawdę będziesz musiał oczyścić SQL podczas konstruowanie zapytania SQL. Jak to zrobić, zależy od języka programowania, którego używasz do wykonywania SQL. Jeśli jest to na przykład PHP, będziesz potrzebować mysql_real_escape_string() :

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

Alternatywą w PHP jest użycie przygotowanych instrukcji , obsłuży on dla Ciebie escaping SQL.

Jeśli używasz Javy (JDBC ), wtedy potrzebujesz PreparedStatement :

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

Aktualizacja :okazuje się, że faktycznie używasz Javy. Musisz zmienić kod w następujący sposób:

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

Nie zapomnij o prawidłowej obsłudze zasobów JDBC. Możesz znaleźć ten artykuł przydatne, aby uzyskać wgląd w to, jak prawidłowo wykonywać podstawowe czynności JDBC. Mam nadzieję, że to pomoże.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL5.6 utknął w procesie próbującym uruchomić usługę

  2. mysql zapytanie przestawne/przestawne

  3. Kolumny liczników MySQL na określonej wartości

  4. Jak używać zmiennych użytkownika MySQL w ADO.NET?

  5. Jak wybrać DISTINCT wiersze bez zaznaczenia pola ORDER BY?