ColdFusion -CFQuery가 올바른 데이터를 반환하지 않음 [폐쇄

StackOverflow https://stackoverflow.com/questions/608104

  •  03-07-2019
  •  | 
  •  

문제

CFQuery가 내 코드에서 실행될 때 왜 세 행을 반환 해야하는지 1 행만 반환하는 이유를 알아내는 데 어려움을 겪고 있습니다.

거의 모든 경우 에이 CFQuery는 올바른 데이터를 반환합니다. 한두 명의 사용자의 경우 CFQuery는 1 행 (3 개 중 1 개) 만 반환합니다. 나는 냉담이 튀어 나오는 디버그 정보에서 출력을 가져 와서 두꺼비에서 해당 쿼리를 실행하고 올바른 결과가 표시됩니다.

CFQuery 및 두꺼비 결과가 다른 원인은 무엇입니까? 내가 반환하는 열 중 하나는 사용자 정의이며 열에는 특수 문자가있을 수 있습니다. 결과가 반환되지 않습니까? 나는 정말로 그루터기가 많고 여기 주변의 어느 누구도 내가 이것에 대해 생각하는 데 도움이되는 냉담을 모른다. 그래서 나는 그렇게합니다.

우리가 말하는대로 웹에서 검색하고 있습니다.

추가 :

<cfquery name="getInfo" datasource="#DSN#">
    SELECT
        u.user_no, u.username, u.description
    FROM
        user_info u
    WHERE
        u.parent = #session.user_no#
    ORDER BY 
        u.username ASC
</cfquery>

다시 한 번, 몇 명의 사용자가 3 개 중 한 행을 반환하고 나머지는 올바른 재조정을 모두 반환하는 것 같습니다.

**** 업데이트 **** 아무도 신경 쓰지 말고 오늘이 문제가 해결되었습니다! 당신이 그것이 무엇인지 알고 싶다면 내가 말할 것입니다.

이 코드를 테스트 한 테스터 (캐시를 청소하고 있다고 주장한 사람)는 캐시를 지우지 않았습니다! 그녀는 내가 그녀에게 문제가 될 가능성이 있다고 말한 후 BS를 먹이고있을 때 그것을 고치려고 노력했다. 오 글쎄, 나는 그것에 너무 많은 시간을 보내지 않았다. CFQueryParam에 대한 답변에 감사드립니다. 냉담 코딩에 지금부터 사용될 것입니다.

건배!

도움이 되었습니까?

해결책


항상 사용하십시오 cfqueryparam 쿼리의 변수 주변!

맞습니다. 이제는 그 길에 있습니다. 해당 코드에는 3 개의 행 중 하나만 반환 할 수있는 것이 없습니다.

따라서 문제는 데이터 관련이거나 코드의 다른 곳입니다.

만약 너라면 즉시 그 쿼리 후 :

<cfdump var="#getInfo#"/><cfabort/>

당신은 한 줄 또는 3 개의 행을 얻습니까?

  • 데이터 문제를 암시하는 행이 하나 인 경우 - ASCII가 아닌 '특별'문자 가이 일을 일으킬 것이라고 의심하지만 정수만으로 반환하여 테스트합니다. SELECT 1 ... - 세 행이 있으면 3 개의 행이 있습니다.

  • 3 개의 행이 있으면 나중에 문제를 일으키는 코드가 있어야하므로 다음에 무슨 일이 일어나고 있는지 알아야합니다.

이해가 되나요?

다른 팁

CFQueryParam을 사용하여 쿼리에 입력하는 변수 유형을 정의합니다.

데이터베이스 쿼리로 너무 구체적으로 아프지 않으며 정수가 문자열로 평가되어 잘못된 결과 세트를 반환하기 전에 문제가 발생했습니다.

(추가 (메인) 보너스 -CFQueryParam은 항상 SQL 주입 공격에 대한 추가 보호에 좋습니다)

오류가 데이터 또는 입력에 있다고 가정합니다 (세션 시간이 설정/무효?).

사실, 나 절대 목격 a <cfquery> 결과는 DB 서버가 콘솔에서 알려주는 것과 다른 결과입니다. 너무 불가능할 정도로 가능성이 있다고 생각하지 않습니다.

다음 테스트 시나리오를 제안합니다.

<cfquery name="AllUsers" datasource="#DSN#>
  SELECT 
    p.user_no,
    COUNT(u.user_no) ChildCount
  FROM
    user_info p
    LEFT JOIN user_info u ON p.user_no = u.parent
  GROUP BY
    p.user_no
  ORDER BY
    COUNT(u.user_no)
</cfquery>

<cfdump var="#AllUsers#">

그곳에서 각 사용자가 얼마나 많은 어린이를 보유하고 있는지 정확히 알 수 있습니다.

더 안전하다고 느끼면 루프를 실행하고 결과를 개별적으로 확인할 수 있습니다.

<cfloop query="AllUsers">
  <cfquery name="SingleUser" datasource="#DSN#">
    SELECT
      u.user_no, u.username, u.description
    FROM
      user_info u
    WHERE
      u.parent = #AllUsers.user_no#
  </cfquery>

  <cfif SingleUser.RecordCount neq AllUsers.ChildCount>
    <cfabort showerror="space-time rupture found for user #AllUsers.user_no#">
  </cfif>
</cfloop>

내 베팅은 그게 될 것입니다 <cfabort> 결코 맞지 않아서 증명할 것입니다 <cfquery> 완벽하게 기능하고 있었고 다른 곳을 봐야합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top