queryExecute ColdFusion语法与Railo / Lucee语法

时间:2015-08-07 17:30:50

标签: coldfusion railo coldfusion-11 lucee

我有一堆针对Railo服务器编写的代码。我们现在正试图将一些代码移到CF11盒子和Lucee盒子上。

我一直在使用queryExecute:

rt = queryExecute(
        sql = 'select *
               from translation
               where    translationID = :translationID
                 and    translatedStr = :translatedStr'
    ,   params = {translationID: arguments.translationID
                , translatedStr: arguments.translatedStr}
    ,   options= {datasource: application.ds}
);

我的印象是CF11上的语法相同,但我收到错误:

Parameter validation error for the QUERYEXECUTE function.
A built-in ColdFusion function cannot accept an assignment statement as a parameter, 
although it can accept expressions. For example, QUERYEXECUTE(d=a*b) is not acceptable. 

上面的executeQuery在Lucee上运行正常。我将需要完成整个代码库并使其适用于CF11和Lucee。

对ACF更熟悉的人可以告诉我这样做的最佳方法是什么。似乎ACF在使用param名称时遇到了麻烦。如果我删除了sql =params =,它会消除一些问题,尽管我喜欢将它们命名为可读性。此外,似乎ACF不喜欢translationID: arguments.translationID并希望我也更改translationID = arguments.translationID。在进行所有更改的耗时过程之前,我只想确保没有遗漏的东西。

2 个答案:

答案 0 :(得分:1)

非常确定您的参数需要采用结构的形式来包含值(如果您愿意,还可以使用查询参数)。

试试这个:

rt = queryExecute(
    "select *
      from translation
      where translationID = :translationID
          and translatedStr = :translatedStr",
    {
          translationID: {value: arguments.translationID},
          translatedStr: {value: arguments.translatedStr}
    },
    {datasource: application.ds}
);

答案 1 :(得分:1)

错误信息非常清楚,不是吗?

  

内置的ColdFusion函数无法接受赋值语句   作为参数,虽然它可以接受表达式。例如,   QUERYEXECUTE(d = a * b)是不可接受的。

你有这个:

queryExecute(
        name = value
    ,   name = value
    ,   name= value
)

错误消息显示的内容不允许。

你只需要摆脱你的args的名字。内置的CFML功能不会那样工作。它是Lucee中的一个compat错误,它 支持这个。