Mysql 您的SQL语法(…)附近有错误;

Mysql 您的SQL语法(…)附近有错误;,mysql,syntax-error,Mysql,Syntax Error,我收到此消息,但找不到任何错误: 您的SQL语法有错误;检查与MySQL服务器版本对应的手册,以了解第1行“where id='null''附近要使用的正确语法 我以为这个代码是错的,但事实证明不是 ResultSet rs = stmt.executeQuery("select password" + "from userinfo where id = '" + id + "';"); 这是错误文件的完整代码 privat

我收到此消息,但找不到任何错误:

您的SQL语法有错误;检查与MySQL服务器版本对应的手册,以了解第1行“where id='null''附近要使用的正确语法

我以为这个代码是错的,但事实证明不是

ResultSet rs = stmt.executeQuery("select password" +
                                 "from userinfo where id = '" + id + "';"); 
这是错误文件的完整代码

 private boolean checkLoginInfo(String id, String password) throws ServletException
 {
        Connection conn = null;
        Statement stmt = null;

        try
        {
            Class.forName("com.mysql.jdbc.Driver");
            conn = DriverManager.getConnection(
                "jdbc:mysql://localhost:3306/webdb", "root", "1234");
            if (conn == null)
                throw new Exception("can't connect to database.<BR>");
            stmt = conn.createStatement();
            ResultSet rs = stmt.executeQuery("select password" +
                                            " from userinfo where id = '" + id + "';"); 
                if (!rs.next()) 
                   return false;
                String correctPassword = rs.getString("password");
                if (password.equals(correctPassword))
                    return true;
                else
                    return false;
        }
private boolean checkLoginInfo(字符串id、字符串密码)抛出ServletException
{
连接conn=null;
语句stmt=null;
尝试
{
Class.forName(“com.mysql.jdbc.Driver”);
conn=DriverManager.getConnection(
“jdbc:mysql://localhost:3306/webdb“,”根“,”1234”);
如果(conn==null)
抛出新异常(“无法连接到数据库。
”; stmt=conn.createStatement(); ResultSet rs=stmt.executeQuery(“选择密码”+ “来自userinfo,其中id=”“+id+”;”; 如果(!rs.next()) 返回false; 字符串correctPassword=rs.getString(“密码”); if(密码等于(正确密码)) 返回true; 其他的 返回false; }
密码和发件人之间缺少一个空格

试试这个

"SELECT password FROM `userinfo` WHERE id = '"+id+"'"
您应该此外阅读以下内容:

  • 转义SQL查询
  • 身份验证/授权(为什么只选择密码?)
  • 代码格式
  • 编辑1:
    错误消息告诉我们,您正在将
    id
    设置为
    'null'
    (字符串,因为“”),而不是
    NULL
    。如果您的
    id
    需要一个整数,但您提供了一个字符串,它将中断。

    在调用checkloginInfo方法之前是否检查了该id是否为NULL。
    NULL
    是有效密码吗?您可能应该在将输入发送到数据库之前验证它们(关于:SQL注入攻击)“from”之前是否有空格?完整代码中有空格,但摘录中没有。此外,您似乎在数据库中以明文形式存储密码。这是一个非常非常糟糕的主意。@VickyS是的,我有。谢谢您的评论。谢谢您的回答。我更改了查询,但仍然不起作用。@lee1707什么类型(例如Integer)字段
    id
    ?是否允许
    NULL
    ?最新的错误消息是什么?您正在将值设置为
    'NULL'
    ,这是一个字符串。如果您的字段需要整数或
    NULL
    ,这可能是错误。抱歉,这是我的错误。我忘记重新编译java。您是对的,非常感谢。(Id类型为字符串,不允许为空)@lee1707很乐意帮助。如果我的答案对您有帮助,请将其标记为正确答案。谢谢。:-)
    "SELECT password FROM `userinfo` WHERE id = '"+id+"'"