为什么CFML一直试图分配而不是输出我的变量?

Jac*_*sky 2 coldfusion lucee

我正在尝试转换数据库列名列表并在查询中检查它.例如,这个列表:

<cfset permissionsLevelList = 'blnGalleryAdd,blnGalleryUpdate,blnGalleryDelete,blnGalleryMaster'>
Run Code Online (Sandbox Code Playgroud)

这不是以任何方式通过UI传递的.

所以,然后我将它转换为数组并尝试在我的查询中循环它

<cfset permissionsLevelArray = listToArray(permissionsLevelList)>
AND (
    <cfloop array="#permissionsLevelArray#" index="i">
        ap.#permissionsLevelArray[i]# = 1 
        <cfif i neq arrayLen(permissionsLevelArray)>OR</cfif>
    </cfloop>
)
Run Code Online (Sandbox Code Playgroud)

但我得到的错误不能

cast [blnGalleryAdd] string to a number value
Run Code Online (Sandbox Code Playgroud)

因此,当我只想输出它时,编译器会尝试将其指定为变量.

有谁知道这方面的任何好的解决方法?

Dan*_*cuk 7

这个文档告诉我,当循环遍历数组时,index属性表示数组元素,而不是该元素的位置.您的错误消息强化了这一点

你所要做的就是改变这个:

<cfloop array="#permissionsLevelArray#" index="i">
    ap.#permissionsLevelArray[i]# = 1 
Run Code Online (Sandbox Code Playgroud)

对此

<cfloop array="#permissionsLevelArray#" index="i">
    ap.#i# = 1 
Run Code Online (Sandbox Code Playgroud)

与您的问题无关,但您并不需要这样:

<cfif i neq arrayLen(permissionsLevelArray)>OR</cfif>
Run Code Online (Sandbox Code Playgroud)

由于您使用的是or逻辑,因此您可以使用不等式启动或完成该块,并or在每次迭代时将该字放在循环中.像这样的东西:

and
(1 = 2
<cfloop>
or
this = that
</cfloop>
)
Run Code Online (Sandbox Code Playgroud)