【发布时间】:2014-02-12 09:24:21
【问题描述】:
去年我发布了一个问题here,关于提交 50 字段的表单,以及执行此操作的最佳方法。该解决方案仍在使用中,并且运行良好。但是,为了构建这些动态查询,我最终会重复很多<cfif>,我想知道是否有更好的方法来处理这个问题。虽然代码最终变得“混乱”,但数据库当然因此非常干净,并且写入次数也保持在最低限度,但是是否有 更好的 方法来执行以下操作?
<cfif StructKeyExists(arguments.form,"data1") or StructKeyExists(arguments.form,"data2") or StructKeyExists(arguments.form,"data3")>
<cfquery>
insert into table1 (
<cfif StructKeyExists(arguments.form,"data1")>data1,</cfif>
<cfif StructKeyExists(arguments.form,"data2")>data2,</cfif>
<cfif StructKeyExists(arguments.form,"data3")>data3,</cfif>
userid
)
values (
<cfif StructKeyExists(arguments.form,"data1")><cfqueryparam cfsqltype="cf_sql_varchar" value="#arguments.form.data1#" maxlength="30">,</cfif>
<cfif StructKeyExists(arguments.form,"data2")><cfqueryparam cfsqltype="cf_sql_varchar" value="#arguments.form.data2#" maxlength="10">,</cfif>
<cfif StructKeyExists(arguments.form,"data3")><cfqueryparam cfsqltype="cf_sql_varchar" value="#arguments.form.data3#" maxlength="25">,</cfif>
<cfqueryparam cfsqltype="cf_sql_smallint" value="#arguments.form.userid#" maxlength="5">
)
on duplicate key update
<cfif StructKeyExists(arguments.form,"data1")>data1=values(data1),</cfif>
<cfif StructKeyExists(arguments.form,"data2")>data2=values(data2),</cfif>
<cfif StructKeyExists(arguments.form,"data3")>data3=values(data3),</cfif>
userid=values(userid)
</cfquery>
</cfif>
出于某种原因,这种“感觉”是错误的。例如,宁愿有更多的写入,将每个值分成自己的更新,这样会不会更聪明,就像这样:
<cfif StructKeyExists(arguments.form,"data1")>
<cfquery>
insert into table1 (data1,userid)
values (<cfqueryparam cfsqltype="cf_sql_varchar" value="#arguments.form.data1#" maxlength="30">,<cfqueryparam cfsqltype="cf_sql_smallint" value="#arguments.form.userid#" maxlength="5">)
on duplicate key update data1=values(data1),userid=values(userid)
</cfquery>
</cfif>
等等。
或者有没有更好的方法来做到这一点,我完全忽略了?!
【问题讨论】:
标签: jquery mysql ajax coldfusion coldfusion-10