0

prepareStatementのプロジェクトで
問題があります 問題は、ユーザーのタイプに応じてテーブルをクエリしたいということです。つまり、ユーザーが一般の場合はuserlistテーブルにアクセスし、ユーザーが管理者の場合はadminテーブル
にアクセスします。

String userid=request.getParameter("userid");
String pwd=request.getParameter("pwd");
String check = request.getParameter("radio");
String table;
String status="";
if(check.equals("General"))
table="userlist";
else
table="Administrator";
try{
String sql = "Select status from"+table+"where userid=? and pwd=?";
Connection conn=DriverManager.getConnection("jdbc:mysql://localhost/Quiz?","root","password");
PreparedStatement ps=conn.prepareStatement(sql);
ps.setString(1,userid);
ps.setString(2,pwd);
ResultSet rs=ps.executeQuery();

次の例外が発生します。

Errorcom.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: SQL 構文にエラーがあります。1 行目の 'userid='nawed13593' および pwd='hello'' 付近で使用する正しい構文については、MySQL サーバーのバージョンに対応するマニュアルを確認してください。

createStatementプロジェクトがSQLインジェクションを起こしやすくなるため、使用したく
ありません 誰でもこれを解決して、上記の例外がスローされた理由を教えてください。 前もって感謝します

4

1 に答える 1

3

テーブル名の前後にスペースを入れないでください。「管理者」の場合は、次のようになります。

Select status fromAdministratorwhere userid=? and pwd=?

SQL ステートメント文字列にスペースを挿入します。

//                              v         v
String sql = "Select status from "+table+" where userid=? and pwd=?";
于 2013-10-04T16:08:04.850 に答える