Pmourya Ответов: 1

Индекс параметра вне диапазона(1> количество параметров, равное 0)


Индекс параметра вне диапазона(1> количество параметров,равное 0)

Что я уже пробовал:

Это мой код.Таблица пользователи содержит 3 строки.имеющие имя пользователя и пароль.Это дает мне ошибку, как:

java.sql.SQLException: Parameter index out of range (1 > number of parameters, which is 0). 

String DRIVER = "com.mysql.jdbc.Driver"; 
Class.forName(DRIVER).newInstance(); 
String url="jdbc:mysql://localhost:3306/regis?user=root&password=fraze"; 
Connection Conn = DriverManager.getConnection(url); 


String strSQL = "select username,password from users where username like '%s'; 

PreparedStatement statement = Conn.prepareStatement(strSQL); 
statement.setString(1, user); 
statement.setString(2, pass); 
ResultSet Rs= statement.executeQuery(strSQL); 

if(myRs.next()){ 
out.println("Login Succesful! A record with the given user name and password exists"); 
} else { 
out.println("Login Failed. No records exists with the given user name and password"); 
} 
statement.close();


Я хочу проверить с помощью базы данных, являются ли введенные имя пользователя и пароль правильными или нет. Может ли кто - нибудь предложить в качестве того, какие были бы соответствующие изменения, которые должны быть сделаны?

Pmourya

Я использую предложение "select* from user where name=?, password=?";затем он выдает ошибку com.mysql.jdbc.exception.jdbc4.mysqlSyntaxErrorException:у вас есть ошибка в синтаксисе SQL; проверьте руководство, которое соответствует вашей версии сервера mysql для правильного синтаксиса для использования рядом с 'password='1234"в строке 1. Пожалуйста помогите

1 Ответов

Рейтинг:
11

Richard MacCutchan

Я объяснил, что вам нужно сделать в вашем вопросе вчера, и даже дал вам ссылку на документацию для предложения Select. Так почему же вы теперь делаете это другим неправильным способом? Вам нужно сделать следующее:
- Создайте предложение SELECT, чтобы найти запись в базе данных для этого идентификатора пользователя, а не такие идентификаторы, как этот, но только этот точный.
- Если идентификатор пользователя найден, то создайте соленый хэш пароля (ссылка, которую я дал вам вчера) и сравните его с тем, что есть в базе данных.
- Если оба эти теста завершатся успешно, то продолжайте, у вас есть действительный логин.

- Если идентификатор пользователя не найден или пароли не совпадают, то отклоните попытку входа в систему. Но не говорите пользователю, что пароль неверный, что дает хакерам слишком много информации.