prepareStatement对变量表名的问题

时间:2013-10-04 16:06:28

标签: java mysql sql jsp

我的项目中prepareStatement有问题问题我想根据用户类型查询表格,即如果用户是普通用户则访问{ {1}}表,如果用户是管理员,则访问userlist
我尝试过:

admin

我得到以下例外:

  

Errorcom.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException:你   您的SQL语法有错误;检查对应的手册   您的MySQL服务器版本,以便在附近使用正确的语法   'userid ='nawed13593'和pwd ='hello''在第1行

我不想使用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(); ,因为这会使我的项目容易出​​现sql注入 任何人都可以帮我解决这个问题以及抛出上述异常的原因吗? 提前感谢

1 个答案:

答案 0 :(得分:3)

您的表名之前或之后没有任何空格。在“管理员”案例中,您将结束这一点:

Select status fromAdministratorwhere userid=? and pwd=?

在SQL语句字符串中插入空格:

//                              v         v
String sql = "Select status from "+table+" where userid=? and pwd=?";