Java & MySql - как избежать запроса перед его выполнением - PullRequest
1 голос
/ 10 ноября 2010

Я использую Java для веб-приложения и работаю с базой данных MySql. Мне нужно экранировать запрос перед его выполнением. Это мой фактический код:

db_result=mydb.selectQuery("SELECT nickname FROM users WHERE nickname='"+log_check_user+"' AND password='"+log_check_pass+"'");

public Vector selectQuery(String query) {
  Vector v = null;
  String [] record;
  int colonne = 0;
  try {
     Statement stmt = db.createStatement();
     ResultSet rs = stmt.executeQuery(query);
     v = new Vector();
     ResultSetMetaData rsmd = rs.getMetaData();
     colonne = rsmd.getColumnCount();

     while(rs.next()) {
        record = new String[colonne];
        for (int i=0; i<colonne; i++) record[i] = rs.getString(i+1);
        v.add( (String[]) record.clone() );
     }
     rs.close();
     stmt.close();
  } catch (Exception e) { e.printStackTrace(); errore = e.getMessage(); }

  return v;
 }

Мне нужно это, как вы можете поверить, чтобы избежать проблемы SQL-инъекций! Как я могу это сделать?

1 Ответ

18 голосов
/ 10 ноября 2010

Использовать подготовленный оператор :

Иногда удобнее использовать объект PreparedStatement для отправки операторов SQL в базу данных. Этот особый тип утверждения является производным от более общего класса, Statement ...

Если вы хотите выполнить объект Statement много раз, это обычно сокращает время выполнения для использования объекта PreparedStatement.

Главная особенность объекта PreparedStatement заключается в том, что, в отличие от объекта Statement, ему предоставляется оператор SQL при его создании. Преимущество этого состоит в том, что в большинстве случаев этот оператор SQL сразу отправляется в СУБД, где он компилируется. В результате объект PreparedStatement содержит не просто оператор SQL, а предварительно скомпилированный оператор SQL. Это означает, что при выполнении PreparedStatement СУБД может просто выполнить оператор SQL PreparedStatement без предварительной компиляции ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...