queryExecute ColdFusion 语法与 Railo/Lucee 语法

queryExecute ColdFusion syntax vs Railo/Lucee syntax

我有一堆针对 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 在参数名称方面遇到了问题。如果我删除 sql =params = 这会解决一些问题,尽管我喜欢将它们命名的可读性。另外,ACF 似乎不喜欢 translationID: arguments.translationID 并希望我也更改它 translationID = arguments.translationID。在我完成所有更改的耗时过程之前,我只想确保没有遗漏任何东西。

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

试试这个:

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

嗯,错误信息很清楚,不是吗?

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.

你有这个:

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

错误消息说不允许。

您只需要删除参数的名称即可。内置的 CFML 函数不是那样工作的。这是 Lucee 中的一个兼容性错误,它 支持这个。