Mysql
 sql >> Base de données >  >> RDS >> Mysql

Stocker HTML dans la base de données MySQL

Les chaînes dans une requête SQL sont -généralement- entourées de guillemets simples. Par exemple

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

Mais si la chaîne HTML elle-même contient également un guillemet simple, cela casserait la requête SQL :

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

Vous le voyez déjà dans le surligneur de syntaxe, la valeur SQL se termine juste avant foo et l'interpréteur SQL ne peut pas comprendre ce qui vient ensuite. Erreur de syntaxe SQL !

Mais ce n'est pas le seul, ça met aussi les portes larges ouvert pour injections SQL (exemples ici ).

Vous aurez vraiment besoin de nettoyer le SQL pendant construction de la requête SQL. La manière de procéder dépend du langage de programmation que vous utilisez pour exécuter le SQL. Si c'est par exemple PHP, vous aurez besoin de mysql_real_escape_string() :

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

Une alternative en PHP consiste à utiliser instructions préparées , il gérera l'échappement SQL pour vous.

Si vous utilisez Java (JDBC ), alors vous avez besoin de PreparedStatement :

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

Mettre à jour :il s'avère que vous utilisez réellement Java. Vous devrez modifier le code comme suit :

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

N'oubliez pas de gérer correctement les ressources JDBC. Vous pouvez trouver cet article utile pour avoir des idées sur la façon de faire les choses JDBC de base de la bonne manière. J'espère que cela vous aidera.