gpt4 book ai didi

java - prepareStatement for variable table name 的问题

转载 作者:太空宇宙 更新时间:2023-11-03 12:22:32 24 4
gpt4 key购买 nike

我的项目中的 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: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'userid='nawed13593' and pwd='hello'' at line 1

我不想使用createStatement,因为那会使我的项目容易出​​现sql注入(inject)
谁能帮我解决这个问题以及抛出上述异常的原因?提前致谢

最佳答案

您的表名前后没有任何空格。在“管理员”案例中,您将得到这样的结果:

Select status fromAdministratorwhere userid=? and pwd=?

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

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

关于java - prepareStatement for variable table name 的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19185830/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com