我正在尝试将查询结果转换为数组
this.arLibrary = ValueList(qryLibrary.ID).ListToArray();
我收到以下错误
详细信息脚本语句必须以“;”结尾。
CFML编译器是 处理:
KnownColumn -1 KnownLine -1
- 以。开头的脚本语句 this.arLibrary在第43行,第9栏。
- 一个cfscript标签 从第21行第2列开始。
KnownText< unknown>第43行消息无效构造。
Snippet this.arLibrary = 值列表(qryLibrary.ID)。 栈跟踪
这确实有效
temp = ValueList(qryLibrary.ID);
this.arMetricLibActive = temp.ListToArray();
这让我想知道ValueList()
是否是一个字符串
答案 0 :(得分:3)
是的,这是一个字符串。该错误是CFML引擎中的解析问题。相同的语法在Lucee中工作正常。提交像Henry建议的错误。
这是CommandBox REPL
中的一个示例CFSCRIPT-REPL: foo = queryNew('bar')
{
"COLUMNS":[
"BAR"
],
"DATA":[
]
}
CFSCRIPT-REPL: valueList( foo.bar ).listToArray()
[
]
答案 1 :(得分:2)
詹姆斯,如果您在向他们展示时阅读错误消息,它会很有用:它们通常包含相关信息。我不是故意在说明明显的#34;某种方式,但它实际上是解决问题的一个非常重要的部分。您遇到来自编译器的错误消息,这意味着在编译源代码时发生错误。但是,您要问的是有关数据类型的问题,这是一种松散且动态类型的语言,如CFML,是运行时考虑因素。 "运行"暗示"当代码运行时#34;在编译代码之后本质上是这样的。如果代码无法编译:它将无法运行。
所以问题不在于valueList()
是否返回字符串或类似的东西。
这里的问题是ColdFusion的CFML解析器中存在一个错误,它无法解释这个表达式:
ValueList(qryLibrary.ID).ListToArray()
我不知道为什么存在这样的问题:解析在另一个函数调用的返回值上调用方法应该没有问题;事实上,使用像这样的valueList()
似乎是一种特殊的做法,而不是一般的内置函数。
提交错误。
至于在你的代码中如何处理它,我认为Dan是对的:通常可以使用查询列作为数组,只要使用括号表示法引用列,例如:{{1 }}。布拉德提请注意这不是在为Lucee工作,但......这既不在这里,也不在那里,只是Lucee需要处理的事情。在Railo中出现了一个错误 - https://issues.jboss.org/browse/RAILO-641 - 但他们拒绝解决这个问题,只有半有效的推理。
答案 2 :(得分:1)
附言:
这适用于ColdFusion 2016及更高版本
<cfscript>
qryLibrary = QueryNew("ID", "varchar");
qryLibrary.addrow({"id" : "cat"});
qryLibrary.addrow({"id" : "dog"});
qryLibrary.addrow({"id" : "fish"});
writedump(qryLibrary);
arLibrary = ValueList(qryLibrary.ID).ListToArray();
writedump(arLibrary);
</cfscript>