如何停止使用evaluate()函数?

ren*_*nan 5 coldfusion evaluate

我在一个名为的列下有一个值为的表:str_condition

在此列中的值可以是:variables.bit_male/ application.bit_male/isdefined('session.int_user_id')

价值可能很复杂.

我需要使用列中值的值.

目前,我正在做的是

<cfif evaluate(query.str_condition)  eq true>
.....code....
</cfif>
Run Code Online (Sandbox Code Playgroud)

现在,我需要省略评估.

Ada*_*ron 5

TBH,我坚持evaluate()这样做:你正在利用其中有意义的少数情况之一.如果你在DB字段中拥有的只是一个表达式(没有标签),那么evaluate()它将正常工作.

正如其他人建议......在数据库存储的表达不理想,但我可以看到有时可能是最好的方法,但是不过考虑它,如果你能拿出完全不同的方法(这是情况 - 特定的,所以我们不能真正给你指导).

对你来说,唯一的另一个真正的选择是将数据库中的代码编写到文件然后include它,但evaluate()我认为这将是一个比使用更糟糕的解决方案.

很多人都evaluate()被这个糟糕的教条所困扰,没有真正停下来思考为什么会这样......在大多数情况下人们都不需要这样做,但在需要它的情况下它是完全正常的(如作为你的).


Dan*_*cuk 2

这是经过编辑的答案,因为我最初误读了这个问题。

在许多情况下,数组表示法是你的朋友

<cfif queryname['fieldname'][rownumber] is true>
code for true
Run Code Online (Sandbox Code Playgroud)

请注意,查询名称没有加引号,但字段名称加了引号。如果您不引用字段名,ColdFusion 将假定它是一个变量。

同样相关的是,如果您将要选择然后执行的内容存储在数据库中,例如代码,则必须选择这些内容,将它们写入另一个 .cfm 文件,然后 cfinclude 该文件。这有点低效。

就您而言,您将变量名称存储在数据库中。如果使用评估给出了正确的结果,那么您所做的任何更改都可能会变得更糟。

  • 这是不正确的 - 看来您(和支持者)还没有阅读_“此列中的值可以是...”_部分;您正在回答与已提出的问题不同的问题。 (2认同)