Java和MySql - 如何在执行之前转义查询

mar*_*zzz 1 java mysql sql-injection

我正在使用Java作为Web应用程序,而我正在使用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;
 }
Run Code Online (Sandbox Code Playgroud)

我可以相信,我需要这个,以避免SQL注入问题!我该怎么做?

Jos*_*ell 18

使用准备好的声明:

有时使用PreparedStatement对象将SQL语句发送到数据库会更方便.这种特殊类型的语句来自更一般的类,Statement...

如果要Statement多次执行对象,通常会减少使用PreparedStatement对象的执行时间.

PreparedStatement对象的主要特征是,与Statement对象不同,它在创建时会被赋予一个SQL语句.这样做的好处是,在大多数情况下,此SQL语句会立即发送到DBMS,并在其中进行编译.因此,该PreparedStatement对象不仅包含SQL语句,还包含已预编译的SQL语句.这意味着当PreparedStatement执行时,DBMS可以只运行PreparedStatementSQL语句而无需先编译它...

  • 在SQL注入的所有讨论中,此链接是强制性的:http://xkcd.com/327/ (2认同)