SQL 语法错误,准备好的语句,无详细信息
SQL Syntax error, prepared statement, no details
我在我的应用程序中使用 JDBC 通过 Java 连接到数据库,但是在发出查询时结果应该是相同的。
我正在尝试验证登录,但遇到了一些问题,这是我的错误:
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 '' at line 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 的 )
在哪里?错误消息是正确的,但由于您的错误发生在查询字符串的最后,因此没有 "later" 文本显示为错误上下文。
我在我的应用程序中使用 JDBC 通过 Java 连接到数据库,但是在发出查询时结果应该是相同的。
我正在尝试验证登录,但遇到了一些问题,这是我的错误:
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 '' at line 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 的 )
在哪里?错误消息是正确的,但由于您的错误发生在查询字符串的最后,因此没有 "later" 文本显示为错误上下文。