如何按名称调用INSERT查询?

时间:2012-06-13 17:02:07

标签: sql function coldfusion insertion cfquery

我要多次克隆一个类ID #FORM.classid#,而不是每次需要时都编写INSERT sql查询,是否有任何解决方案只需编写一次并使用{{{ 1}}名字?我希望我知道如何编写函数,但我是CFML编程的新手。

addClass

2 个答案:

答案 0 :(得分: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) />

编辑:您可能需要对数据源变量进行调整。这取决于它来自哪里,很难说,因为你没有范围变量。

答案 1 :(得分:3)

这是一种方法。阅读文档中的函数也是一个好的开始。 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>

您还应该考虑在cfquery标记上使用result属性,因为您可以用它替换最后一个查询。 http://help.adobe.com/en_US/ColdFusion/9.0/CFMLRef/WSc3ff6d0ea77859461172e0811cbec22c24-7fae.html

如果您无法使用结果方法,那么我会利用它来确保您不会遇到两个查询之间的竞争条件。

[e]您会注意到我在参数中添加了DSN,因为您不应该引用函数范围之外的变量! [e2]你还应该在cfqueries中使用cfqueryparam标签,但我会让你更新那部分。