2009-12-23 2 views
1
내가 업데이트 쿼리 내가위한 그것의 로딩을 볼 수있는 상태 표시 줄에, 나는이 페이지를 실행

cfquery 등의 문제

<cfquery name = "UpdateRecord" 
      dataSource = #DATASOURCE# 
      username = #DBUSER# 
      password = #DBPASSWORD# 
      result="updateResult" > 
     update table1 
set field1=(select field1 from table2 where field3='Some Value') 
where field4='someothervalue' 
    </cfquery> 
    <cfdump var="#UpdateResult#"> 

그러나, 아래 페이지가로드되지처럼 cfquery를 사용하여 발생하는 것을 시도하고있다

장기.

하지만 다음

update table1 set field1='abc' where field4='someothervalue' 

원하는 간단한 업데이트 쿼리를 사용하는 경우는 잘 작동

수있는 사람이 어떻게 cfquery 등을 사용하여 위와 같이 쿼리를 실행할 수있는 아이디어가?

감사합니다.

답변

1

PreserveSingleQuotes 내에서 업데이트를 래핑 해 보셨습니까?

<cfquery name = "UpdateRecord" 
     dataSource = #DATASOURCE# 
     username = #DBUSER# 
     password = #DBPASSWORD# 
     result="updateResult" > 
    #PreserveSingleQuotes(update table1 set field1=(select field1 from 
    table2 where Field3='Some Value') where field4='someothervalue')# 
</cfquery> 
+0

예 .. PreserveSingleQuotes와 함께했습니다. 감사합니다. – CFUser

+0

jarofclay에 동의합니다. 다음 단계는 cfqueryparam – kevink

0

subselect 문이 1 행을 반환하는지 확인하십시오. 어떤 RDMS를 실행 중인지에 따라 다르지만, 모든 데이터베이스가이 기능을 지원하는 것은 아닙니다. 나는 그것이 올바르게 실행되는지 확인하기 위해 먼저 데이터베이스에서 직접 쿼리를 실행하려고합니다.

쿼리 끝에 제한 1을 넣거나 데이터베이스에서 field1을 집계로 감싸는 것을 지원하지 않으면 sql이 한 행만 반환하도록 할 수 있습니다.

SELECT MAX(field1) FROM table2 WHERE field3 = 'Some Value' 

참고 : 문자열 값이 사용자의 매개 변수 인 경우 SQL 주입을 방지하려면 cfqueryparam을 사용해야합니다.

+0

예, 직접 DB에서 동일한 작업을 시도했지만 제대로 작동했지만 cfquery를 사용하면 작동하지 않습니다. 내 select 문은 하나의 출력 만 제공합니다. cfquery에서 paranthesis '(', ')'를 사용할 수 있습니까? – CFUser

+0

게시 한 쿼리에서 '(', ')'을 (를) 어디에 사용하고 있습니까? 괄호 사용에는 아무런 문제가 없습니다. 작은 따옴표에 문제가있을 가능성이 큽니다. cfqueryparam을 사용하지 않으면 CF는 자신을 보호하기 위해 몇 가지 조치를 취합니다.) @jarofclay에 대한 내 회신을 참조하십시오. – Leigh

2

cfqueryparam을 값으로 사용하면 PreserveSingleQuotes를 사용할 필요가 없습니다. 또한 SQL 인젝션을 방지합니다.

+1

+1을 사용하도록 변환해야합니다. CF는 자동으로 인용 부호를 이스케이프하여 SQL 주입 위험을 줄입니다. PreserveSingleQuotes()는 보호 기능을 해 제하고 데이터베이스를 SQL injection에 노출시킬 수 있습니다. PreserveSingleQuotes()는 실제로 필요하지 않고 위험을 이해하지 않는 한 사용하지 마십시오. 또한 cfqueryparam을 사용하면 바인드 변수의 성능 이점을 얻을 수 있습니다. – Leigh

관련 문제