Строки в запросе 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. Надеюсь, это поможет.