【问题标题】:Parameter index out of range (1 > number of parameters, which is 0)参数索引超出范围(1 > 参数个数,即 0)
【发布时间】:2012-07-23 19:09:31
【问题描述】:

我收到此错误,谁能帮我找出我在查询中的错误?

public boolean populateLeagues(String leaguename, String password){

        Connect connect = new Connect();
        Connection conn = connect.Connection();
        Statement stmt = conn.createStatement();            
        String query = "INSERT INTO users VALUES('" + leaguename + "')";
        stmt.executeUpdate(query);
        conn.close();
}

【问题讨论】:

  • 即使这行得通,你也不应该这样做。您应该使用带参数的准备好的语句。
  • 您的代码容易受到SQL injection 的攻击。您应该使用参数化查询重写它。请参阅https://www.owasp.org/index.php/Preventing_SQL_Injection_in_Java 获取指导。
  • @Srikanth:“有价值观”是什么意思?
  • 另外,你的代码怎么从来不用password
  • @Jon 我的意思是leaguename 不为空.. 它从调用函数中获取值

标签: java mysql


【解决方案1】:

正如@Jon Skeet 所说,使用准备好的语句并将参数注入。通过这种方式,您不必弄清楚有关 sql 注入和数据格式的所有麻烦(考虑使用您提供的查询来全局存储日期时间)。 可能leaguename 的值是null。请记住,字符串类型的默认值不是空字符串,而是null

【讨论】:

    【解决方案2】:

    您在leaguename 周围使用单引号,因为我们不知道leaguename 的格式,这可能会导致错误

    【讨论】:

      猜你喜欢
      • 2014-03-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-21
      • 2016-01-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多