在数据库中插入一个包含MySQL和Java双引号的刮削页面
想象一下,我的页面上有一堆看起来像这样的部分(): 但是,这是因为页面中有多个“标记” 我可以看到一些选择:在数据库中插入一个包含MySQL和Java双引号的刮削页面,java,mysql,Java,Mysql,想象一下,我的页面上有一堆看起来像这样的部分(): 但是,这是因为页面中有多个“标记” 我可以看到一些选择: 像这样转义字符:“\”' 将字符替换为:“”” 删除所有不相关的数据(HTML),只将相关数据保存到数据库中 我意识到,在防止SQL注入方面也有最佳实践。不过,这是一个独立的系统,所以目前还不是问题。我已经说过,如果有任何答案可以解释如何防止这种情况,我更愿意实现它 编辑1: 以下是@chrylis comment中的内容。这是我所拥有的: //Insert values int
//Insert values into variables
String rns_pub_date = rns.getRnsPubDate();
String rns_headline = rns.getRnsHeadline();
String rns_link = rns.getRnsLink();
String rns_fulltext = rns.getRnsFullText();
String rns_constituent_name = rns.getRnsConstituentName();
//Prepare the SQL string
String sql = "INSERT into rns (rns_pub_date, rns_headline, rns_link, rns_fulltext,constituent_id) VALUES" + "(?,?,?,?,(select constituent_id from constituent where constituent_name = \"" + rns.getRnsConstituentName() + "\")";
//Prepare the statement
PreparedStatement prest = connect.prepareStatement(sql);
prest.setString(1, rns_pub_date);
prest.setString(2, rns_headline);
prest.setString(3, rns_link);
prest.setString(4, rns_fulltext);
prest.setString(5, rns_constituent_name);
但是,它提供了以下错误:
Parameter index out of range (5 > number of parameters, which is 4).
编辑2:
通过删除第5个参数的转义双引号修复了插入:
String sql = "INSERT into rns (rns_pub_date, rns_headline, rns_link, rns_fulltext, constituent_id) VALUES" + "(?,?,?,?,(select constituent_id from constituent where constituent_name = ?))";
使用PreparedStatement,则无需转义。API中的使用示例使用PreparedStatement,则无需转义。API中的使用示例使用PreparedStatement,这不仅是由于SQL注入造成的错误做法,而且速度慢、效率低,并且存在引号字符问题。使用参数化查询。不是由于SQL注入,这只是一种不好的做法,它速度慢、效率低,并且在引号字符方面存在问题。请使用参数化查询。“我意识到我是在自食其果,但有没有办法让它不那么痛苦?“@Boristeider。。。有用。为什么您仍然使用字符串粘贴而不是参数化
成分名称
?@chrylis。谢谢你的到场。将旧行粘贴到第二次编辑。现在将实际的新行粘贴到第二次编辑中。“我意识到我是在射中自己的脚,但有没有办法让它不那么痛?”@Boristeider。。。有用。为什么您仍然使用字符串粘贴而不是参数化成分名称
?@chrylis。谢谢你的到场。将旧行粘贴到第二次编辑。现在有实际的新行粘贴到第二次编辑。谢谢,这似乎是最好的方式前进,但我仍然有问题。更新上面。谢谢,这似乎是最好的前进方式,但我仍然有问题。以上更新。
Parameter index out of range (5 > number of parameters, which is 4).
String sql = "INSERT into rns (rns_pub_date, rns_headline, rns_link, rns_fulltext, constituent_id) VALUES" + "(?,?,?,?,(select constituent_id from constituent where constituent_name = ?))";