我想问一下如何同时更新所有行中的数据。这是我的SQL:
<cfloop index="#form.ppp_id#">
<cfquery name="viewPoint" datasource="#application.DataSource#">
update PCRS_PHOTOPOINT set PPP_POINT_FROM = #form.point_from#,
PPP_POINT_UNTIL = #form.point_until#,
PPP_UPDATE_DATE = SYSDATE, PPP_ICONS_NAME = '#form.icons_name#'
where PPP_ID = #form.ppp_id#
</cfquery>
</cfloop>
我收到了这个错误:
标签'CFLOOP'的属性验证错误
答案 0 :(得分:1)
根本不需要使用循环。您可以使用SQL的in
运算符而不是=
来一次更新值列表,而不是在循环中执行SQL语句。此外,正如其他人已经提到的那样,您最好使用cfqueryparam
而不是将用户提供的字符串直接传递给数据库。
<cfquery name="viewPoint" datasource="#application.DataSource#">
update PCRS_PHOTOPOINT set
PPP_POINT_FROM = <cfqueryparam cfsqltype="cf_sql_varchar" value="#form.point_from#">,
PPP_POINT_UNTIL = <cfqueryparam cfsqltype="cf_sql_varchar" value="#form.point_until#">,
PPP_UPDATE_DATE = SYSDATE,
PPP_ICONS_NAME = <cfqueryparam cfsqltype="cf_sql_varchar" value="#form.icons_name#">
where PPP_ID in (<cfqueryparam list="yes" cfsqltype="cf_sql_integer" value="#form.ppp_id#">)
</cfquery>
答案 1 :(得分:0)
你应该这样做:
<cfloop list="#form.ppp_id#" index="iItems">
<cfquery name="viewPoint" datasource="#application.DataSource#">
update PCRS_PHOTOPOINT set PPP_POINT_FROM = "#form.point_from#",
PPP_POINT_UNTIL = "#form.point_until#",
PPP_UPDATE_DATE = SYSDATE, PPP_ICONS_NAME = "#form.icons_name#"
where PPP_ID = #iItems#
</cfquery>
</cfloop>
让我知道它是怎么回事。