2012-04-14 9 views
0

これは、minecraft用のプラグインです。設定で設定された顧客IDを持つプレーヤーを引き出し、それらを表示することになっています。代わりに、顧客IDが何であるにせよ、誰もが引っ張られます。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が一意である場合は、likeの代わりにequals( 'customer_id' = config.getString( "customer_id"))を使用しないでください。 – Shehzad

+0

これは私の問題ですか?私は=の代わりに=を使用する必要がありますか? –

+0

'player.getName()。substring(0、player.getName()。length()/ 2)'が実際にプレーヤーのニックを返すのを確認しましたか?故意にそれの半分を返すように私に見える! (また、ニックネームや顧客IDがユニークである場合は、ユニークなものだけを使用してください。もう1つはオーバーヘッドです)。 – halfer

答えて

1
  1. それが動作することを確認し、あなたができるだけ簡単に照会してください、とだけにしてあなたの目標に向かって構築します。
  2. お客様IDの他に他の条件があることは意味がありません。その顧客IDを持つすべてのプレーヤーが必要だと言った。
  3. すでに述べたように、IDは単一の値に制限されていて、一部の文字列がLIKEであるとは限りません。
関連する問題