【问题标题】:MySQL query error, query wont work properlyMySQL查询错误,查询无法正常工作
【发布时间】:2016-03-06 14:10:16
【问题描述】:

我试图在我的 servlet 控制器中运行一个查询,该查询将 id 与我的数据库中的名称相匹配。我使用的查询是

String query="SELECT *FROM entry WHERE id ="+id2+"AND name="+sname;

但我一直收到一个错误提示

"在第 1 行的 'name=Mary Jane' 附近使用正确的语法"

我很确定我的查询是正确的,当我在没有 AND 名称部分的情况下运行它时它可以工作。所以我不知道为什么它不能与 AND 名称部分一起使用,除非我的查询在那方面是错误的。有什么想法吗?

【问题讨论】:

    标签: mysql sql servlets


    【解决方案1】:

    连接字符串是SQL注入攻击的第一步!

    如果你想走这条路加空格:

    String query="SELECT * FROM entry WHERE id = "+id2+" AND name= "+sname;
    

    如果需要,将 ' 添加到引号字符串文字中:

    String query="SELECT * FROM entry WHERE id = "+id2+" AND name= '"+sname + "'";
    

    编辑:

    你真的应该使用PreparedStatement 喜欢:

    String query="SELECT * FROM entry WHERE id = ? AND name = ?";
    PreparedStatement ps = con.prepareStatement(query);
    
    ps.setInt(1, id2);
    ps.setString(2, sname);
    

    【讨论】:

    • 抱歉,在您更新答案后,我已删除我的评论。无论如何,我会强烈推荐在这里使用PreparedStatement
    • @JozefChocholacek Yup Prepared Statement 就是这样。连接字符串仅适用于学校作业,这是非常糟糕的做法
    • 感谢您的帮助,我将使用准备好的语句,但我想确保我的查询首先正常工作,非常感谢您的所有帮助!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多