我有一堆针对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
。在进行所有更改的耗时过程之前,我只想确保没有遗漏的东西。
答案 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错误,它 支持这个。