【问题标题】:coldfusion store variables in table and output without using Evaluate不使用 Evaluate,coldfusion 将变量存储在表中并输出
【发布时间】:2014-08-12 22:49:13
【问题描述】:

我遇到了一个我不知道如何避免使用 Evaluate 的情况。我已经存储在数据库表会话变量中,当我输出查询结果时,我想显示会话变量的值。

所以设置如下:

插入数据...

<cfquery datasource="TEST" >
insert into testTable (labelVar) values ("session.test")  <- I don't want the value of the session var stored I just want to store the session var
</cfquery>

输出结果...

<cfquery name="qExample" datasource="TEST" >
select labelVar from testTable
</cfquery>

<cfset session.test="Hi!">
<cfset TextValue = Evaluate("#qExample.LabelVar#")>
<cfoutput>#TextValue#</cfoutput> <-Outputs Hi!

现在这一切都可以了,但是 我如何在不使用 Evaluate 的情况下完成此操作

【问题讨论】:

  • 您希望 testTable 有多少行?
  • 如果您想避免使用评估,请将查询结果写入 .cfm 文件,然后 cfinclude 该文件。就我个人而言,我认为评估将是两个弊端中的较小者。
  • evaluate() 多年来受到了不好的评价(当之无愧),但在过去的几年里,性能有了很大的提高。唯一的其他选择是 Dan 提到的关于写入 .cfm 并包含它的内容,但那里的性能将比 evaluate() 差得多。这是我见过的少数几个用例之一,evaluate() 确实是最佳选择。

标签: coldfusion evaluate


【解决方案1】:

你可以在这里使用structGet(),如果数据库中的值纯粹是一个作用域变量名:

<cfset TextValue = structGet(qExample.LabelVar)>

我对@9​​87654325@ 本质上不好的指控进行了一些研究。我认为这通常是可以避免的,但现在这似乎并不是什么大问题:'"evalulate() is really slow". Is it now?'

然而,在考虑使用 evaluate() 时,务必注意 Leigh 的以下评论:

要记住的一件事是它的使用方式。评价不挑剔 关于它执行的内容。如果用于客户端提供的值、FORM、URL、 它可能会带来一些风险,因此 IMO 应谨慎而明智地使用它。

【讨论】:

  • 完美的亚当!非常感谢您的阅读和选择。 structGet 确实有效,并且知道 eval 不会严重损害性能是一种解脱。
  • 要记住的一点是它的使用方式。 Evaluate 对其执行的内容并不挑剔。如果在客户端提供的值、FORM、URL 上使用,它可能会带来一些风险,因此 IMO 谨慎而明智地使用它。
  • 好主意,@Leigh。我已将您的评论作为帖子脚本添加到我的答案中,以免人们不阅读 cmets。
  • Evaluate() 与 DE() 一起使用时真正强大: 您需要在 DE() 中添加一个额外的哈希来转义哈希每一个,为了这个工作。
【解决方案2】:

Adam Cameron 的选择是最好的,但这里只是实现目标的几种不同方法。

(我创建了一个 zession 范围作为快速测试,以便您可以测试您的选择。

<cfset zession = StructNew()>
<cfset zession.test = "Hi there">
<cfset labelvar = "zession.test">

选项 1:

<cfoutput>#evaluate(labelvar)#</cfoutput>

选项 2:

<cfoutput>#zession[listGetAt(labelvar,2,".")]#</cfoutput>

J 只提出选项 2 来指出更多选项。您的变量是否总是在会话范围内?如果是这样,您可以保存键名而不是整个变量名。所以如果 labelvar 是“测试”那么

<cfoutput>#zession[labelVar]#</cfoutput>

几年前,Evaluate() 很糟糕,我认为挥之不去的污名是好的,因为它迫使开发人员在可以避免的时候不要求助于惰性方法。以上是一些在速度较慢时避免该功能的方法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-09-21
    • 2011-06-12
    • 1970-01-01
    • 2021-09-07
    • 2021-11-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多