sql >> Database teknologi >  >> RDS >> Mysql

Gem HTML i MySQL-databasen

Strenge i en SQL-forespørgsel er -normalt- omgivet af enkelte anførselstegn. F.eks.

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

Men hvis selve HTML-strengen også indeholder et enkelt anførselstegn, ville det bryde SQL-forespørgslen:

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

Du ser det allerede i syntaksfremhævningen, SQL-værdien slutter lige før foo og SQL-fortolkeren kan ikke forstå, hvad der kommer derefter. SQL-syntaksfejl!

Men det er ikke det eneste, det sætter også dørene vide åben for SQL-injektioner (eksempler her ).

Du bliver virkelig nødt til at rense SQL'en i løbet af opbygning af SQL-forespørgslen. Hvordan man gør det afhænger af det programmeringssprog, du bruger til at udføre SQL. Hvis det for eksempel er PHP, skal du bruge mysql_real_escape_string() :

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

Et alternativ i PHP er at bruge forberedte erklæringer , vil den håndtere SQL-escape for dig.

Hvis du bruger Java (JDBC ), så har du brug for PreparedStatement :

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

Opdater :det viser sig, at du rent faktisk bruger Java. Du skal ændre koden som følger:

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

Glem ikke at håndtere JDBC-ressourcer korrekt. Du kan muligvis finde denne artikel nyttigt at få lidt indsigt i, hvordan man gør grundlæggende JDBC-ting på den rigtige måde. Håber dette hjælper.



  1. Brug MySQL relationelle databaser på Ubuntu 8.04 (Hardy)

  2. Hvordan kan jeg skrive SQLite Real-værdier til Java BigDecimal-værdier?

  3. Hvad er forskellen mellem SERIAL og AUTO_INCREMENT i mysql

  4. MySQL MAX_JOIN_SIZE fejl