在脚本化的Coldfusion查询中-为什么不添加queryParams?

在脚本化的Coldfusion查询中-为什么不添加queryParams?,coldfusion,coldfusion-9,cfml,cfdump,Coldfusion,Coldfusion 9,Cfml,Cfdump,我有一个动态生成的查询,除了一个参数外,所有参数都是可选的,只有一个必填字段。 我以为我会很聪明,但奇怪的事情发生了 -cfscript // Standard new query(), set name, datasource etc query.addParam(value=requiredParam, type=cf_sql_varchar); sqlStatement = "select ...."; if (optional field 2){ sqlStatement &

我有一个动态生成的查询,除了一个参数外,所有参数都是可选的,只有一个必填字段。 我以为我会很聪明,但奇怪的事情发生了

-cfscript
// Standard new query(), set name, datasource etc

query.addParam(value=requiredParam, type=cf_sql_varchar);
sqlStatement = "select ....";

if (optional field 2){
    sqlStatement &= "and field like '%?%' ";
    query.addParam(value=optionalValue, type=cf_sql_varchar);
}
... optional fields 2,3,4,5 repeats ...
query.execute(sql=sqlStatement);
因此,当我执行仅传递必需字段时,查询和结果都是正确的。 dump仅显示sqlParameter中所需的条目(带有2个结果)

当我添加带有可选参数的调用时,只有第一个(显示必需参数)。可选参数不显示(在结果转储中),结果集变为0行。(??非常奇怪)

我用调试器跟踪它(来自cf8扩展,cfeclipse,而不是构建器,在CF9单机版上)

可选字段逻辑正确,代码已测试并执行。 在“变量”窗格中,参数似乎已正确添加,但没有显示在结果查询中(在结果页面上转储),仅显示所需的参数

我猜有些奇怪的事情正在发生,但这毫无意义。 是否有可能必须将所有addParams添加到一起? like(语法)是问题所在吗

为什么使用ifs/conditional会阻止其他addParams不工作/显示? 转储中出现一些奇怪的显示问题

很抱歉,在敏感区域未提供真实代码

PEBKAC

应该是:

if (optional field 2){
    sqlStatement &= "and field like ? ";
    query.addParam(value='%#optionalValue#%', type=cf_sql_varchar);
}

查询现在工作正常,返回正确的行,使用的参数显示在转储中…

如果您有多个字段,我认为最好使用name参数:

if (optional field 1) {
    sqlStatement &= "AND Field LIKE :field1 ";
    query.addParam( name="field2", value="%#optionalvalue#%", type=cf_sql_varchar);

}
if (optional field 2) {
    sqlStatement &= "AND Field LIKE :field2 ";
    query.addParam( name="field2", value="%#optionalvalue#%", type=cf_sql_varchar);
}
好读物:

请注意,在某些情况下,在语句中的:name后面放置空格的错误

if (optional field 1) {
    sqlStatement &= "AND Field LIKE :field1 ";
    query.addParam( name="field2", value="%#optionalvalue#%", type=cf_sql_varchar);

}
if (optional field 2) {
    sqlStatement &= "AND Field LIKE :field2 ";
    query.addParam( name="field2", value="%#optionalvalue#%", type=cf_sql_varchar);
}