2016-08-21 5 views
0

は...誰かがこの中にいただきました!間違って私に言うことができるしてください場合:あなたのSQL構文でエラーが発生しているcom.mysql.jdbc.exception SQL構文にエラーがあります。私はこのエラーを持っている理由私にはわからない

com.mysql.jdbc.exception。あなたが?プレースホルダを使用してテーブル名を代用することはできません

mat_pay="maybe"; 
Class.forName("com.mysql.jdbc.Driver"); 
connec = DriverManager.getConnection("jdbc:mysql://localhost/babe","root",""); 
stmt = connec.prepareStatement("INSERT INTO ? VALUES (, ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ?) "); 
       stmt.setString(1,mat_pay); 
       stmt.setInt(2,septembre.var_m_p_g1); //septembre.var_m_p_g1 has a value 'integer' 
       stmt.setInt(3,id_g2); //septembre.var_m_p_g1 has a value 'integer' 
       stmt.setInt(4,0); 
       stmt.setInt(5,0); 
       stmt.setInt(6,0); 
       stmt.setInt(7,0); 
       stmt.setInt(8,0); 
       stmt.setInt(9,0); 
       stmt.setInt(10,0); 
       stmt.setInt(11,0); 
       stmt.setInt(12,0); 
       stmt.setInt(13,0); 
       stmt.executeUpdate(); 
+0

さらに問題が発生する可能性がありますが、コードの書式設定に煩わされていないため、伝えにくいです。あなたは人々にあなたを助けようとしているので、そうするのがあなた自身の最善の関心事です。 – MarsAtomic

+0

実行すると思われる正確なSQLを投稿する([編集]を使用して質問に追加する)。 –

答えて

1

を使用する権利構文についてはMySQLサーバのバージョンに対応するマニュアルを確認してください。ステートメントは明示的に表の名前を付ける必要があります。あなたが本当に(SQLインジェクション脆弱)がこれを行う必要がある場合は、mat_payの値は、ユーザ/クライアントが入力したものになるが、あなたのコントロールではなく、被写体の下で、完全ではありません

// assuming mat_pay is the name of a variable containing the table name 
String query = String.format("INSERT INTO %s VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)", mat_pay); 

stmt = connec.prepareStatement(query); 
stmt.setInt(1,septembre.var_m_p_g1); //septembre.var_m_p_g1 has a value 'integer' 
stmt.setInt(2,id_g2); //septembre.var_m_p_g1 has a value 'integer' 
stmt.setInt(3,0); 
stmt.setInt(4,0); 
stmt.setInt(5,0); 
stmt.setInt(6,0); 
stmt.setInt(7,0); 
stmt.setInt(8,0); 
stmt.setInt(9,0); 
stmt.setInt(10,0); 
stmt.setInt(11,0); 
stmt.setInt(12,0); 
stmt.executeUpdate(); 

を書式文字列を使用して、動的ステートメントを構築することができます外部の操作に。そうしないと、SQLインジェクション攻撃が発生します。

また、値リストの先頭にカンマが追加されています。

関連する問題