Strings em uma consulta SQL são - geralmente - cercadas por aspas simples. Por exemplo.
INSERT INTO tbl (html) VALUES ('html');
Mas se a própria string HTML também contiver uma aspa simples, ela quebrará a consulta SQL:
INSERT INTO tbl (html) VALUES ('<form onsubmit="validate('foo', 'bar')">');
Você já o vê no marcador de sintaxe, o valor SQL termina logo antes de
foo
e o interpretador SQL não consegue entender o que vem depois. Erro de sintaxe SQL! Mas isso não é o único, também deixa as portas largas aberto para injeções de SQL (exemplos aqui ).
Você realmente precisará limpar o SQL durante construindo a consulta SQL. Como fazer isso depende da linguagem de programação que você está usando para executar o SQL. Se for, por exemplo, PHP, você precisará de
mysql_real_escape_string()
:$sql = "INSERT INTO tbl (html) VALUES ('" . mysql_real_escape_string($html) . "')";
Uma alternativa em PHP é usar declarações preparadas , ele lidará com o escape do SQL para você.
Se você estiver usando Java (JDBC ), então você precisa de
PreparedStatement
:String sql = "INSERT INTO tbl (html) VALUES (?)";
preparedStatement = connection.prepareStatement(sql);
preparedStatement.setString(1, html);
Atualizar :acontece que você está realmente usando Java. Você precisará alterar o código da seguinte forma:
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ão se esqueça de manipular os recursos JDBC corretamente. Você pode encontrar este artigo útil para obter alguns insights sobre como fazer coisas básicas do JDBC da maneira correta. Espero que isto ajude.