2012-04-14 2 views
0

Это плагин для minecraft. Предполагается, что игроки вытаскивают идентификатор клиента, установленный в конфиге, и отображают их в игре. Вместо этого он привлекает всех, независимо от их идентификатора клиента.SQL-запросы тянут все?

if(cmd.getName().equalsIgnoreCase("getaward")) 
    { 
     Player player = (Player)sender; 
     try { 
      Class.forName("com.mysql.jdbc.Driver"); 

     con = DriverManager.getConnection (dbUrl,dbUser,dbPass); 

    Statement stmt = con.createStatement(); 
    ResultSet rs = stmt.executeQuery("SELECT * FROM `votesdb` WHERE `nick` = '"+player.getName().substring(0,player.getName().length()/2)+"' AND `customer_id` LIKE "+config.getString("customer_id")+""); 
    //ResultSet rs = stmt.executeQuery("SELECT nick,votes FROM `votesdb` WHERE nick='"+player.getName()+" LIMIT 1"); 
    if(rs.next()) 
    { 
     if(rs.getInt("votes")!=0) 
     { 
      player.sendMessage(ChatColor.GREEN+"[VFD]"+ChatColor.AQUA+"Thanks for voting! You will find something special in your inventory. :)"); 
      bukkit.broadcastMessage(ChatColor.GREEN+"[VFD]"+ChatColor.AQUA+player.getDisplayName()+" has been rewarded for Voting for the Server!"); 
      stmt.executeUpdate("UPDATE `votesdb` SET flag=0 WHERE `nick` LIKE '"+player.getDisplayName().substring(0,player.getDisplayName().length()/2)+"'"); 
      player.getInventory().addItem(new ItemStack(this.matID,this.matAmt)); 


     } 
     else 
     { 
      player.sendMessage(ChatColor.RED+"You have already claimed your reward."); 
     } 
    } 
    else 
    { 
     player.sendMessage(ChatColor.RED+"We could not find you in the database! Please make sure you used the correct name when you voted!"); 
    } 
+2

IF custormer Id уникален, тогда вы не используете equals ('customer_id' = config.getString (« customer_id »)), а не как .... – Shehzad

+0

- это моя проблема? мне нужно использовать = вместо того, чтобы нравится? –

+0

Вы проверили, что 'player.getName(). Substring (0, player.getName(). Length()/2)' действительно возвращает ник игрока? Мне кажется, что это сознательно возвращает половину! (Кроме того, если псевдоним или идентификатор клиента уникальны, используйте только уникальный, другой - просто накладные расходы). – halfer

ответ

1
  1. сделать вы запрашиваете как можно более простым, видеть, что это работает, и только потом строить к своей цели.
  2. Не имеет смысла иметь какие-либо другие условия помимо идентификатора клиента. Вы сказали, что вам нужны все игроки с этим идентификатором клиента.
  3. Как уже отмечалось, идентификаторы должны быть ограничены одним значением, а не LIKE некоторой строкой.
Смежные вопросы