2012-06-13 8 views
0

클래스 ID #FORM.classid#을 여러 번 복제해야하지만 INSERT SQL 쿼리를 필요할 때마다 작성하는 대신 한 번 작성하고 addClass 이름으로 쿼리를 호출하는 솔루션이 있습니까? 함수를 코딩하는 방법을 알고 싶지만 CFML 프로그래밍의 초보자입니다.이름으로 INSERT 쿼리를 호출하는 방법?

<cfquery name="currentClass" datasource="#dsn#"> 
     SELECT class_name, class_description 
     FROM classes 
     WHERE classid = <cfqueryparam value="#FORM.classid#" cfsqltype="cf_sql_numeric"> 
</cfquery> 
<cfquery name="addClass" datasource="#dsn#"> 
     INSERT INTO classes (class_name,class_description) 
     VALUES ('#currentClass.class_name#', '#currentClass.class_description#') 
</cfquery> 
<cfquery name="getNewID" datasource="#dsn#"> 
     Select LAST_INSERT_ID() as classid 
</cfquery> 

답변

4

작업을 수행하고 그 기능을 호출하는 기능을 만드십시오. 이것이 ColdFusion 내에서 기능을 수행하는 방법입니다. 당신은 그러나 당신이 당신의 최종 목표에 도달하기 위해 실행되는 쿼리의 양을 간단하게 할 수 있지만, 난 그냥 당신이 이미하고있는 일을 통해 쓴 :

<cffunction name="AddTheClass" access="public" returntype="numeric"> 
    <cfargument name="ClassID" required="true" type="numeric" /> 

    <cfscript> 
     var currentClass = ""; 
     var addClass  = ""; 
     var getNewID  = ""; 

     var myResult  = 0; 
    </cfscript> 

    <cfquery name="currentClass" datasource="#dsn#"> 
     SELECT class_name, class_description 
     FROM classes 
     WHERE classid = <cfqueryparam value="#Arguments.classid#" cfsqltype="cf_sql_numeric"> 
    </cfquery> 
    <cfquery name="addClass" datasource="#dsn#"> 
     INSERT INTO classes (class_name,class_description) 
     VALUES ('#currentClass.class_name#', '#currentClass.class_description#') 
    </cfquery> 
    <cfquery name="getNewID" datasource="#dsn#"> 
     Select LAST_INSERT_ID() as classid 
     </cfquery> 

    <cfset myResult = getNewID.classid /> 

    <cfreturn myResult /> 
</cffunction> 

<!--- How to call it ---> 
<cfset intNewClassID = AddTheClass(ClassID=Form.classid) /> 

편집 : 당신은 당신의 데이터 소스 변수에 대한 조정해야 할 수도 있습니다. 종류는 변수의 범위를 지정하지 않았으므로 변수의 출처와 전달 방법에 따라 다릅니다.

+0

정말 고마워요! – Steve

+0

@StephaneKouakou - 또한 CF8 +를 사용하는 경우 [cfquery의] (http://help.adobe.com/en_US/ColdFusion/9.0/CFMLRef/WSc3ff6d0ea77859461172e0811cbec22c24-7fae.html)'result' 속성을 사용하여 새로운 id 대신에'LAST_INSERT_ID()'를 사용하십시오. (편집 : Ooops 통지 Busches 이미 언급 :) – Leigh

3

여기에 한 가지 방법이 있습니다. 문서에서 함수를 읽는 것도 좋은 시작이 될 것입니다. 당신은 또한 당신이 그것으로 마지막 쿼리를 대체 할 수 있습니다으로 cfquery 태그에 결과 속성을 사용하여 조사한다 http://help.adobe.com/en_US/ColdFusion/9.0/CFMLRef/WSc3ff6d0ea77859461172e0811cbec22c24-7f5c.html

<cffunction name='addClass' returntype='numeric'> 
    <cfargument name='ClassID' type='numeric' required='yes' /> 
    <cfargument name='DSN' type='string' required='yes' /> 

    <cfset var currentClass = '' /> 
    <cfset var addClass = '' /> 
    <cfset var getNewID = '' /> 

    <cfquery name="currentClass" datasource="#Arguments.dsn#"> 
    SELECT class_name, class_description 
    FROM classes 
    WHERE classid = <cfqueryparam value="#Arguments.classid#" cfsqltype="cf_sql_numeric"> 
    </cfquery> 
    <cfquery name="addClass" datasource="#Arguments.dsn#"> 
    INSERT INTO classes (class_name,class_description) 
    VALUES ('#currentClass.class_name#', '#currentClass.class_description#') 
    </cfquery> 
    <cfquery name="getNewID" datasource="#Arguments.dsn#"> 
    Select LAST_INSERT_ID() as classid 
    </cfquery> 
    <cfreturn getNewID.ClassID /> 
</cffunction> 

. http://help.adobe.com/en_US/ColdFusion/9.0/CFMLRef/WSc3ff6d0ea77859461172e0811cbec22c24-7fae.html

결과 메서드를 사용할 수없는 경우 두 쿼리간에 경쟁 조건이 적용되지 않도록 활용할 것입니다.

[e] 함수의 범위를 벗어나는 변수를 참조하면 안되기 때문에 인수에 DSN을 추가했음을 알 수 있습니다! [e2] cfqueries에도 cfqueryparam 태그를 사용해야하지만 해당 부분을 업데이트하도록하겠습니다.