为什么 CFML 一直尝试分配而不是输出我的变量?
Why CFML keeps trying to assign rather than outputting my variable?
我正在尝试转换数据库列名列表并在查询中检查它。例如,这个列表:
<cfset permissionsLevelList = 'blnGalleryAdd,blnGalleryUpdate,blnGalleryDelete,blnGalleryMaster'>
这不会以任何方式通过 UI 传递。
所以,然后我将它转换为数组并尝试在我的查询中循环遍历它
<cfset permissionsLevelArray = listToArray(permissionsLevelList)>
AND (
<cfloop array="#permissionsLevelArray#" index="i">
ap.#permissionsLevelArray[i]# = 1
<cfif i neq arrayLen(permissionsLevelArray)>OR</cfif>
</cfloop>
)
但是我收到错误消息 cannot
cast [blnGalleryAdd] string to a number value
因此,当我只想输出它时,编译器试图将其分配为变量。
有人知道解决这个问题的好办法吗?
这最终成功了:
<cfset realIndex = 1>
<cfloop array="#permissionsLevelArray#" index="i">
ap.#i# #chr(61)# 1
<cfif realIndex neq arrayLen(permissionsLevelArray)>OR</cfif>
<cfset realIndex++>
</cfloop>
AND (
<cfscript>
permissionsLevelArray = listToArray(permissionsLevelList);
for ( i = 1; i LTE ArrayLen( permissionsLevelArray ); i++ )
{
WriteOutput( (i>1?" OR ":"") & "ap." & permissionsLevelArray[i] & " = 1" );
}
</cfscript>
)
这个documentation告诉我,在遍历数组时,index
属性表示数组元素,而不是该元素的位置。你的错误消息强化了这一点。
你所要做的就是改变这个:
<cfloop array="#permissionsLevelArray#" index="i">
ap.#permissionsLevelArray[i]# = 1
至此
<cfloop array="#permissionsLevelArray#" index="i">
ap.#i# = 1
与你的问题无关,但你真的不需要这个:
<cfif i neq arrayLen(permissionsLevelArray)>OR</cfif>
由于您使用的是 or
逻辑,因此您可以使用不等式开始或结束该块,并在每次迭代时将单词 or
放入循环中。像这样:
and
(1 = 2
<cfloop>
or
this = that
</cfloop>
)
我正在尝试转换数据库列名列表并在查询中检查它。例如,这个列表:
<cfset permissionsLevelList = 'blnGalleryAdd,blnGalleryUpdate,blnGalleryDelete,blnGalleryMaster'>
这不会以任何方式通过 UI 传递。
所以,然后我将它转换为数组并尝试在我的查询中循环遍历它
<cfset permissionsLevelArray = listToArray(permissionsLevelList)>
AND (
<cfloop array="#permissionsLevelArray#" index="i">
ap.#permissionsLevelArray[i]# = 1
<cfif i neq arrayLen(permissionsLevelArray)>OR</cfif>
</cfloop>
)
但是我收到错误消息 cannot
cast [blnGalleryAdd] string to a number value
因此,当我只想输出它时,编译器试图将其分配为变量。
有人知道解决这个问题的好办法吗?
这最终成功了:
<cfset realIndex = 1>
<cfloop array="#permissionsLevelArray#" index="i">
ap.#i# #chr(61)# 1
<cfif realIndex neq arrayLen(permissionsLevelArray)>OR</cfif>
<cfset realIndex++>
</cfloop>
AND (
<cfscript>
permissionsLevelArray = listToArray(permissionsLevelList);
for ( i = 1; i LTE ArrayLen( permissionsLevelArray ); i++ )
{
WriteOutput( (i>1?" OR ":"") & "ap." & permissionsLevelArray[i] & " = 1" );
}
</cfscript>
)
这个documentation告诉我,在遍历数组时,index
属性表示数组元素,而不是该元素的位置。你的错误消息强化了这一点。
你所要做的就是改变这个:
<cfloop array="#permissionsLevelArray#" index="i">
ap.#permissionsLevelArray[i]# = 1
至此
<cfloop array="#permissionsLevelArray#" index="i">
ap.#i# = 1
与你的问题无关,但你真的不需要这个:
<cfif i neq arrayLen(permissionsLevelArray)>OR</cfif>
由于您使用的是 or
逻辑,因此您可以使用不等式开始或结束该块,并在每次迭代时将单词 or
放入循环中。像这样:
and
(1 = 2
<cfloop>
or
this = that
</cfloop>
)