2012-07-30 3 views
3

을 사용하여 바꾸기를 사용하지 않습니다. on을 사용하여 SQL 쿼리에서 자리 표시자를 바꿀 때마다 바꾸기를' '로 둘러 쌉니다.이를 방지하는 방법이 있습니까?스칼라 플레이 프레임 워크 Anom SQL.on은 '

그것은 그것이 SQL 구문 오류가 발생합니다 ''와 테이블 이름을 래핑 때문에 나는

SQL("SELECT * FROM {table} blah").on("table" -> tabletouse) 

등의 작업을 수행 할 수 없음을 의미합니다.

답변

4

이 당신은 그냥 고려

SQL(
    """ 
    select %s from %s 
    where 
     name = {name} and 
     date between {start} and {end} 
    order by %s 
    """.format(fields, table, order) 
).on(
    'name  -> name, 
    'start -> startDate, 
    'end  -> endDate 
) 

을 탈출하지 않으 체크 아웃 당신이 포맷 기능을 사용하여 전송하는 데이터해야 사용자 입력에서 오지 말아야합니다. 그렇지 않으면 적절하게 새 니타 이징해야합니다.

+0

사용자 입력에 의해 결정되는 구성에서 비롯된 것입니다. 감사. – UberMouse

1

시도하고있는 것을 수행 할 수 없습니다. Anorm의 대체는 PreparedStatements를 기반으로합니다. 모든 데이터를 의미하는 것은 자동으로 교체 사용할 수 없습니다 의미 탈출됩니다,

  • 테이블 이름을
  • 열 이름,
  • 은 어떤 피연산자, SQL 키워드 등

가장 좋은 당신 여기에서 할 수있는 것은 문자열 연결 (그리고 무슨 일이 정말 내 생각에 나쁜 방법입니다) :

SQL("SELECT * FROM " + tabletouse + " blah").as(whatever *) 

PS : 당신은 확실히 데이터의 포맷 기능을 사용하여, 두 가지 접근 방식을 결합 할 수 question about table names in PreparedStatements.

관련 문제