동일한 쿼리를 사용하여 테이블 열을 정렬하려고하지만 매개 변수로 열을 ORDER BY에 전달하면 열 이름 앞뒤에 따옴표가 추가됩니다. ORDER BY 매개 변수를 사용하는 경우 따옴표 사이에 열 이름을 쓰지 않으면 MySQL이이를 무시합니다.
실행할 예 또는 쿼리 :
select * from app_user ORDER BY mobile_token ASC LIMIT 0 , 20
이것은 최대 절전 모드가 MySQL로 보내는 것입니다.
select * from app_user ORDER BY 'mobile_token' ASC LIMIT 0 , 20
자바 쿼리 :
query = JPA.em().createNativeQuery("select * from app_user ORDER BY :column ASC LIMIT :init , :page",AppUser.class);
query.setParameter("column", column);
query.setParameter("init", pageNumber*pageSize);
query.setParameter("page", pageSize);
다음과 같이 NativeQuery를 변경할 수 있습니다.
"select * from app_user ORDER BY "+column+" ASC LIMIT :init , :page"
하지만 이것은 내 앱이 안전하지 않게 될 것입니다.
값을 쿼리에 매개 변수로만 전달할 수 있습니다. 열 또는 필드 이름이 아닙니다. 그러면 데이터베이스가 쿼리에서 실제로 사용되는 열을 알 수 없으므로 실행 계획을 준비 할 수 없게됩니다.
따라서 연결을 사용하는 솔루션은 유일한 솔루션입니다. 열이 사용자로부터 온 것이 아닌지 확인하십시오. 또는 사용자가 제공 한 경우 유효한 열 이름이고 사용자가 사용할 수 있습니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다