我正在尝试执行以下操作:
sentence = "some set of words";
words = sentence .split(" ");
qryWords = new Query();
qryWords .setSQL("
SELECT
[word]
FROM
[word_list]
WHERE
[word] IN ( :wordsToCheck )
");
qryWords.addParam( name="wordsToCheck", value = words, CFSQLTYPE="CF_SQL_VARCHAR", list="true" );
qryWordsResult = qryWords.execute();
我得到 0 个结果但没有错误,我期望有结果(我已经通过用静态字符串替换 sql 参数来检查这一点)。奇怪的是当我转储 qryWordsResult
, 它显示
SQLPARAMETERS
array
1 [Ljava.lang.String;@3a4b8277
但如果我使用标签和 <cfqueryparam ...
做同样的事情, 结果转储是
SQLPARAMETERS
array
1 words
最佳答案
This does work but using the array works in
<cfqueryparam ..>
so I'm wondering why [addParam()
] doesn't exhibit the same behavior
它只是似乎 有效。由于 cfqueryparam 需要一个字符串,CF 会默默地将数组转换为字符串(即文字字符串 [Ljava.lang.String;@3a4b8277
)。因此,尽管查询成功执行,但该字符串显然不会匹配“word”列中的任何值。
IMO 使用 QueryExecute()比 Query.cfc
简单.使用占位符 ?
,应该可以解决问题。
请注意,添加“分隔符”属性以将列表分隔符更改为空格。
result = queryExecute(
" SELECT [word] FROM [word_list] WHERE [word] IN ( ? )"
, [ { value="some set of words"
, cfsqltype="cf_sql_varchar"
, list=true
, separator=" " }
]
, {datasource="YourDataSource"}
);
writeDump( result );
关于Coldfusion - 添加列表参数未正确插入值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55046909/