1

我有一堆针对 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。我只是想确保在完成所有更改的耗时过程之前没有遗漏任何东西。

4

2 回答 2

1

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

尝试这个:

rt = queryExecute(
    "select *
      from translation
      where translationID = :translationID
          and translatedStr = :translatedStr",
    {
          translationID: {value: arguments.translationID},
          translatedStr: {value: arguments.translatedStr}
    },
    {datasource: application.ds}
);
于 2015-08-08T00:33:58.293 回答
1

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

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

你有这个:

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

错误消息说不允许。

您只需要摆脱 args 的名称。内置的 CFML 函数不能这样工作。这是 Lucee 中的一个兼容错误,它确实支持这一点。

于 2015-08-08T06:44:48.043 回答