복붙노트

[SQL] 문자열에서 데이터베이스 쿼리를 구성 할 때 ColdFusion은 추가 따옴표를 추가

SQL

문자열에서 데이터베이스 쿼리를 구성 할 때 ColdFusion은 추가 따옴표를 추가

나는 내가 그것을 실행하는 쿼리를 전달할 수있는 기능을 가지고, 그래서 내가 ColdFusion에서 코딩 만 CFScript를 유지하기 위해 노력하고   #질문#

그리고 그것을 통과, ColdFusion에서 2 따옴표와 작은 따옴표를 대체하고 어떻게 든하지만, 내가 SQL 내 쿼리를 작성할 = 때 "B = '#의 C #을이'WHERE A가 SELECT * FROM". 그래서 최종 쿼리 WHERE = B ','C '가된다.

나는 문자열을 여러 가지 방법을 많이 만드는 시도,하지만 난 그냥 하나의 견적을 떠나 얻을 수 없습니다. 심지어 대체 문자열을하고 아무런 효과가 없습니다.

어떤 생각이 왜 이런 일이 일어나고 있는가? 그것은이 프로젝트의 기간 동안 CFScript의 생활의 나의 희망을 망치고있다

해결법

  1. ==============================

    1.<올 cfquery> 태그 내에서 변수를 보간 할 때 ColdFusion은, 디자인, 작은 따옴표를 이스케이프합니다.

    <올 cfquery> 태그 내에서 변수를 보간 할 때 ColdFusion은, 디자인, 작은 따옴표를 이스케이프합니다.

    당신이 원하는 일을하려면 PreserveSingleQuotes () 함수를 사용해야합니다.

    <cfquery ...>#PreserveSingleQuotes(query)#</cfquery>
    

    이 주소 그러나, SQL 인젝션의 위험은 당신이 자신을 노출하는 않도록하는 않습니다.

    사용 또한 데이터베이스가 대부분의 경우 성능이 향상됩니다 쿼리를 캐시 할 수 있습니다.

    오래 된 벤 포르타 열 및 사용의 이점에 대한 자세한 내용은 브래드 우드의 최근 게시물을 읽고 도움이 될 수 있습니다.

  2. ==============================

    2.귀하의 질문에 대한 대답, 다른 사람이 말했듯이, preserveSingleQuotes을 사용하고 있습니다 (...)

    귀하의 질문에 대한 대답, 다른 사람이 말했듯이, preserveSingleQuotes을 사용하고 있습니다 (...)

    그러나, 당신이 실제로 원하는 솔루션은 동적 이런 식으로 쿼리를 구축 할 수 없습니다. 그것은 나쁜 나쁜 나쁜입니다.

    적절한 같은 IFS / 스위치 / 등과 함께 cfquery 등의 태그 내부에 SQL을 넣어, 모든 CF 변수는 CFQUERYPARAM 태그를 사용하여 확인합니다.

    (당신이 ORDER BY 절에서 변수를 사용하는 경우 참고, 당신은 수동으로 변수를 탈출해야합니다; CFQUERYPARAM은 ORDER BY 절에서 사용할 수 없습니다)

  3. ==============================

    3.ColdFusion은 자동으로 작은 따옴표 따옴표를 이스케이프 <올 cfquery> 태그 다음과 같은 구문을 사용하는 경우 :

    ColdFusion은 자동으로 작은 따옴표 따옴표를 이스케이프 <올 cfquery> 태그 다음과 같은 구문을 사용하는 경우 :

    SELECT * FROM TABLE WHERE Foo='#Foo#'
    

    경우에 당신은 당신이 #PreserveSingleQuotes (푸) #를 호출해야합니다 # 푸 번호에 작은 따옴표를 유지하려는 것이다.

    함수 결과에 대한 유일한 변수 값에 대한 자동 탈출 작동하지 유의하십시오.

    SELECT * FROM TABLE WHERE Foo='#LCase(Foo)#' /* Single quotes are retained! */
    

    우회 자동으로 탈출에 함수 결과로 선회 - 그 빛에서, 함수 PreserveSingleQuotes는 () 값에 "널 작업"보다 훨씬 더없는 (어도비 LiveDocs의 참조).

  4. ==============================

    4.나는 그가 좋은 일을했다 생각하기 때문에 나는 데이브의 대답을 투표했다.

    나는 그가 좋은 일을했다 생각하기 때문에 나는 데이브의 대답을 투표했다.

    나는 당신이 가능성이 수행 할 수있는 일반적인 SQL 작업을 많이 단순화 할 수 ColdFusion에서 위해 설계된 여러 가지 도구도 있다는 것을 그러나 추가하고 싶습니다. 원래 더그 휴즈에 의해 만들어진 하나의 내가 DataFaucet라는 개발 된 마크 만델, 원자로에서 매우 경량 스티브 브라 이언트에 의해 쓰여진 DataMgr라는 도구뿐만 아니라 전송이있다. 이들 각각은 고유의 장점과 단점이 있습니다. 개인적으로 난 당신이있는 거 쉽다 쿼리의 다른 종류를 구축하기위한 구문의 다양한, CFScript를 유지하기 위해 당신에게 최고의 기능을 제공합니다 하나가 될 DataFaucet을 고려 생각합니다.

    다음은 몇 가지 예입니다 :

    qry = datasource.select_avg_price_as_avgprice_from_products(); //(requires CF8)
    
    qry = datasource.select("avg(price) as avgprice","products"); 
    
    qry = datasource.getSelect("avg(price) as  avgprice","products").filter("categoryid",url.categoryid).execute();
    
    qry = datasource.getSelect(table="products",orderby="productname").filter("categoryid",url.categoryid).execute();
    

    CFQUERYPARAM 항상 SQL 주입 공격을 방지하기 위해 이러한 필터 문에 사용되며, 삽입, 업데이트 및 삭제 문에 대한 유사한 구문이 있다는 것을 프레임 워크 보장합니다. (피하기 SQL 주입에 대한 간단한 규칙의 몇 가지가 있습니다.)

  5. from https://stackoverflow.com/questions/266586/coldfusion-adding-extra-quotes-when-constructing-database-queries-in-strings by cc-by-sa and MIT license