我要多次克隆一个类ID #FORM.classid#
,而不是每次需要时都编写INSERT sql查询,是否有任何解决方案只需编写一次并使用{{{ 1}}名字?我希望我知道如何编写函数,但我是CFML编程的新手。
addClass
答案 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标签,但我会让你更新那部分。