나는 다음과 같다 자바 코드에서 SQL 코드가 :오류 1064 : SQL 구문 오류
Connection con = null;
PreparedStatement pstmt = null;
ResultSet rs = null;
beforeExerTestDTO dto = new beforeExerTestDTO();
StringBuffer sql = new StringBuffer();
sql.append(" select * ");
sql.append(" from n_before_exer ");
sql.append(" where id=?");
sql.append(" and reg_date = (select max(reg_date) from n_before_exer where id=?)");
try {
con = pool.getLocalConnection();
pstmt = con.prepareStatement(sql.toString());
pstmt.setString(1, id);
pstmt.setString(2, id);
System.out.println("여기까진 살까??");
rs = pstmt.executeQuery();
/......
...... some code/
}catch(SQLException e){
System.out.println("read : " + e);
System.out.println("read : " + sql);
}catch(Exception e){
System.out.println("read : " + e.getStackTrace().toString());
}finally{
DBClose.close(con, pstmt, rs);
}
return dto;
}
파일은 콘솔에서 다음과 같은 성명을 형성 실행됩니다 경우 :
select * from n_before_exer where id=? and reg_date = (select max(reg_date) from n_before_exer where id=?)
와 내가 시도 무엇
java.sql.SQLEXCEPTION
가 발생합니다 :
- 나는 MySQL의 워크 벤치 쿼리 같은 실행 :
다음과 같은 오류 있어요 :
이Error Code: 1064. 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 '? and reg_date = (select max(reg_date) from n_before_exer where id=?)' at line 1
주제 쇼에 대한 연구의 비트 :
- 이 방법입니다 주입 공격으로 이어질 수있는 선호하는 방법이 아닙니다.
- 매개 변수에 대해 자리 표시자를 사용하는 것이 좋습니다 누군가가 나에게 맞는 선호하는 방법으로하시기 바랍니다
감사
를이 문장을 구성 도울 수 있다면
그것은 나를 위해 조금 복잡한 것 같습니다
"?" 쿼리를 실행하기 전에 매개 변수를 사용합니까? –
@ DanteFañaBadia : 오류 진술 주위에 여분의 코드가 추가되었습니다. 당신이 무엇을 말하고 있는지를 확인할 수 있는지 알 수 있습니까? –
나는 매개 변수에 문제가 있다고 생각합니다. 매개 변수가 올바르게 설정되지 않았습니까? , 그냥 디버깅을 제안합니다. –