SQL 语法错误,预准备语句,无详细信息


SQL Syntax error, prepared statement, no details

我在我的应用程序中使用 JDBC 通过 Java 连接到数据库,但是在发出查询时结果应该是相同的。

我正在尝试验证登录,但遇到了一些问题,这是我的错误:

您的 SQL 语法有误;请查看手册 对应于您的MySQL服务器版本,以便使用正确的语法 靠近第 1 行的"

正如你所看到的,它并没有真正告诉我很多事情。

对于那些使用PHP的人,我使用PDO编写了一个快速转换

function conversion($connection, $username, $password) {
    $statement = $connection->prepare("SELECT * FROM `forum_users` WHERE `username`=:name AND `password`= MD5(CONCAT(MD5(salt), MD5(:pass))");
    $statement->bindParam(":name", $username);
    $statement->bindParam(":pass", $password);
    return $statement->execute();
}

这是 Java 中的代码

Connection connection = null;
PreparedStatement statement = null;
ResultSet results = null;
try {
    connection = getConnection();
    statement = connection.prepareStatement(""
            + "SELECT * FROM `"+SQL_DB+"`.`forum_users`"
            + " WHERE `username`=?"
            + " AND `password`= MD5(CONCAT(MD5(salt), MD5(?))");
    statement.setString(1, username);
    statement.setString(2, password);
    results = statement.executeQuery();
    while(results.next()) {
        System.out.println("Login success");
    }
} catch(SQLException e) {
    e.printStackTrace();
}

值得注意的是,salt 是数据库中的一列,我正在尝试修改我的登录以使用单个查询,而不是两个不同的查询。

拼写错误:

" AND `password`= MD5(CONCAT(MD5(salt), MD5(?))")
                     1      2   3    3     4 42

请注意括号上的不匹配。关闭#1 )在哪里?错误消息是正确的,但由于错误发生在查询字符串的最末尾,因此没有"稍后"文本显示为错误上下文。