Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/255.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java SQL语法错误,已准备语句,无详细信息_Java_Php_Mysql_Pdo - Fatal编程技术网

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

Java SQL语法错误,已准备语句,无详细信息,java,php,mysql,pdo,Java,Php,Mysql,Pdo,我在应用程序中使用JDBC通过Java连接到数据库,但是在发出查询时,结果应该是相同的 我正在尝试验证登录,但遇到一些问题,以下是我的错误: 您的SQL语法有错误;检查手册 对应于您的MySQL服务器版本,以便使用正确的语法 在第1行的“”附近 正如你所看到的,它并没有告诉我什么 对于那些使用PHP的人,我使用PDO编写了一个快速转换 function conversion($connection, $username, $password) { $statement = $connec

我在应用程序中使用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

注意支架上的不匹配。要关闭的
在哪里?错误消息是正确的,但由于您的错误发生在查询字符串的最末尾,因此没有“稍后”文本显示为错误上下文。

我实际上严格地来自Java背景,有一点PHP(我所有的SQL经验都来自于PHP),您在说什么?Java使用
+
来连接,我在这里读到了关于使用CONCAT函数的内容。哦,天哪,我怎么能用一个缺少的括号重新编写了三次呢谢谢,现在一切都安排好了。千万不要以为准备成功了。始终检查DB操作(或任何涉及外部资源的操作)的故障。