Coldfusion - 添加列表参数未正确插入值

标签 coldfusion coldfusion-10 cfml

我正在尝试执行以下操作:

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/

相关文章:

javascript - Coldfusion 使用 javascript 显示/隐藏 div block

coldfusion - 创建包含文件日志 Coldfusion

soap - wsdl2 不显示 ColdFusion 10 中的扩展功能

sql - ColdFusion 查询 - 注入(inject)保护

database - 如何在集群环境中管理 cfc 的状态

java - 更快地动态加载谷歌地图标记

apache - 以与多实例 Adob​​e CF 相同的方式设置 Railo

mysql - 无法将 Coldfusion 10 连接到 mysql 5

coldfusion - 从 ColdFusion 9 升级到 10 后如何修复计划任务

ssl - 使用 Coldfusion 在本地测试 ssl HTTPS 应用程序