CF8和MySQL5,用于在INSERT INTO中循环。sql语法错误,同时在cfquery中插入cfloery INSERT INTO
我正在获取表单数据并试图优化insert语句以在cfquery中循环。 最好的情况是,循环只是在VALUES附近,以便拥有一个INSERT,但我在尝试识别第二个迭代时遇到了问题,并且在第一个INSERT VALUES的开头放了一个逗号。 所以我用循环遍历整个INSERT。至少在同一个cfquery中。我的问题是我无法得到正确的循环的第二个(和更多)迭代的语法。它对第一个工作正常,如果我把环路取出,工作正常。
我得到的错误是:
sql syntax error near 'INSERT INTO table(wID,session,xNameVar,xID,set1rt,set2rt,set3rt,set4rt,set5rt,set'
这里是我使用的代码代码:
<cfif structKeyExists(form, "x1s1xID")><!--- verifies if there is data in field 1 for a specific form section--->
<cfquery name="qCreateXdata" datasource="#application.datasource#">
<cfloop from="1" to="#form.sessions#" index="i"><!--- form.sessions is a variable for the number of times to loop --->
<cfif structKeyExists(form, "x1s#i#xID")><!--- a little redundant but used for other iterations of loop otherwise get a variable not defined error --->
INSERT INTO table
(wID,
session,
xNameVar,
xID,
set1rt,
set2rt,
set3rt,
set4rt,
set5rt,
set6rt)
VALUES
(#variables.wID#,
#wCreateFormData["session" & i]#,
'#wCreateFormData["x1s" & i & "xNameVar"]#',
#wCreateFormData["x1s" & i & "xid"]#,
<!--- the below values are not required in form so need to be null integers instead of empty strings if not set in form --->
<cfqueryparam cfsqltype="CF_SQL_INTEGER" value="#trim(wCreateFormData["x1set1reps" & i])#" maxlength="3" null="#NOT len(trim(wCreateFormData["x1set1r" & i]))#" />,
<cfqueryparam cfsqltype="CF_SQL_INTEGER" value="#trim(wCreateFormData["x1set2reps" & i])#" maxlength="3" null="#NOT len(trim(wCreateFormData["x1set2r" & i]))#" />,
<cfqueryparam cfsqltype="CF_SQL_INTEGER" value="#trim(wCreateFormData["x1set3reps" & i])#" maxlength="3" null="#NOT len(trim(wCreateFormData["x1set3r" & i]))#" />,
<cfqueryparam cfsqltype="CF_SQL_INTEGER" value="#trim(wCreateFormData["x1set4reps" & i])#" maxlength="3" null="#NOT len(trim(wCreateFormData["x1set4r" & i]))#" />,
<cfqueryparam cfsqltype="CF_SQL_INTEGER" value="#trim(wCreateFormData["x1set5reps" & i])#" maxlength="3" null="#NOT len(trim(wCreateFormData["x1set5r" & i]))#" />,
<cfqueryparam cfsqltype="CF_SQL_INTEGER" value="#trim(wCreateFormData["x1set6reps" & i])#" maxlength="3" null="#NOT len(trim(wCreateFormData["x1set6r" & i]))#" />
)
<cfif structKeyExists(form, "x2s#i#xID")>
,(#variables.wID#,
#wCreateFormData["session" & i]#,
'#wCreateFormData["x2s" & i & "xNameVar"]#',
#wCreateFormData["x2s" & i & "xid"]#,
<cfqueryparam cfsqltype="CF_SQL_INTEGER" value="#trim(wCreateFormData["x2set1reps" & i])#" maxlength="3" null="#NOT len(trim(wCreateFormData["x2set1r" & i]))#" />,
<cfqueryparam cfsqltype="CF_SQL_INTEGER" value="#trim(wCreateFormData["x2set2reps" & i])#" maxlength="3" null="#NOT len(trim(wCreateFormData["x2set2r" & i]))#" />,
<cfqueryparam cfsqltype="CF_SQL_INTEGER" value="#trim(wCreateFormData["x2set3reps" & i])#" maxlength="3" null="#NOT len(trim(wCreateFormData["x2set3r" & i]))#" />,
<cfqueryparam cfsqltype="CF_SQL_INTEGER" value="#trim(wCreateFormData["x2set4reps" & i])#" maxlength="3" null="#NOT len(trim(wCreateFormData["x2set4r" & i]))#" />,
<cfqueryparam cfsqltype="CF_SQL_INTEGER" value="#trim(wCreateFormData["x2set5reps" & i])#" maxlength="3" null="#NOT len(trim(wCreateFormData["x2set5r" & i]))#" />,
<cfqueryparam cfsqltype="CF_SQL_INTEGER" value="#trim(wCreateFormData["x2set6reps" & i])#" maxlength="3" null="#NOT len(trim(wCreateFormData["x2set6r" & i]))#" />
)
</cfif>
<cfif structKeyExists(form, "x3s#i#xID")>
,(#variables.wID#,
#wCreateFormData["session" & i]#,
'#wCreateFormData["x3s" & i & "xNameVar"]#',
#wCreateFormData["x3s" & i & "xid"]#,
<cfqueryparam cfsqltype="CF_SQL_INTEGER" value="#trim(wCreateFormData["x3set1reps" & i])#" maxlength="3" null="#NOT len(trim(wCreateFormData["x3set1r" & i]))#" />,
<cfqueryparam cfsqltype="CF_SQL_INTEGER" value="#trim(wCreateFormData["x3set2reps" & i])#" maxlength="3" null="#NOT len(trim(wCreateFormData["x3set2r" & i]))#" />,
<cfqueryparam cfsqltype="CF_SQL_INTEGER" value="#trim(wCreateFormData["x3set3reps" & i])#" maxlength="3" null="#NOT len(trim(wCreateFormData["x3set3r" & i]))#" />,
<cfqueryparam cfsqltype="CF_SQL_INTEGER" value="#trim(wCreateFormData["x3set4reps" & i])#" maxlength="3" null="#NOT len(trim(wCreateFormData["x3set4r" & i]))#" />,
<cfqueryparam cfsqltype="CF_SQL_INTEGER" value="#trim(wCreateFormData["x3set5reps" & i])#" maxlength="3" null="#NOT len(trim(wCreateFormData["x3set5r" & i]))#" />,
<cfqueryparam cfsqltype="CF_SQL_INTEGER" value="#trim(wCreateFormData["x3set6reps" & i])#" maxlength="3" null="#NOT len(trim(wCreateFormData["x3set6r" & i]))#" />
)
</cfif>
<!---... you get the idea.....there are 12 total cfif blocks like this --->
<!--- then I end with a ';' in order to close this INSERT statement and go back to the start of the loop for #form.sessions# number of times --->
;
</cfif>
</cfloop>
</cfquery>
</cfif>
你为什么要做''而不是''?我的意思是 - 你*实际上试图发出多个插入语句,不是吗? –
Tomalak
2009-08-12 13:29:17
性能 - 尝试避免每次循环迭代时cfquery的开销。出于同样的原因,最好我只是循环VALUES,但保持每个单独的INSERT是第二好的。 – 2009-08-12 13:39:06
无论如何,你正在通过'进行插入。你有没有衡量这个实际影响有多大,还是更多的猜测? –
Tomalak
2009-08-12 13:56:41