Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在数据库中插入一个包含MySQL和Java双引号的刮削页面_Java_Mysql - Fatal编程技术网

在数据库中插入一个包含MySQL和Java双引号的刮削页面

在数据库中插入一个包含MySQL和Java双引号的刮削页面,java,mysql,Java,Mysql,想象一下,我的页面上有一堆看起来像这样的部分(): 但是,这是因为页面中有多个“标记” 我可以看到一些选择: 像这样转义字符:“\”' 将字符替换为:“”” 删除所有不相关的数据(HTML),只将相关数据保存到数据库中 我意识到,在防止SQL注入方面也有最佳实践。不过,这是一个独立的系统,所以目前还不是问题。我已经说过,如果有任何答案可以解释如何防止这种情况,我更愿意实现它 编辑1: 以下是@chrylis comment中的内容。这是我所拥有的: //Insert values int

想象一下,我的页面上有一堆看起来像这样的部分():

但是,这是因为页面中有多个“标记”

我可以看到一些选择:

  • 像这样转义字符:“\”'
  • 将字符替换为:“
  • 删除所有不相关的数据(HTML),只将相关数据保存到数据库中
  • 我意识到,在防止SQL注入方面也有最佳实践。不过,这是一个独立的系统,所以目前还不是问题。我已经说过,如果有任何答案可以解释如何防止这种情况,我更愿意实现它

    编辑1: 以下是@chrylis comment中的内容。这是我所拥有的:

        //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 = ?))";