4

我不确定我是否做错了什么,但如果你用 CFScript 编写它,你似乎不能在单个查询中多次使用 cfqueryparam。

此行为与 CFML 不一致。我刚刚重新编写了一个从 CFML 到 CFScript 的类似查询,我收到以下错误:cfsqlparam 'id' is not defined

local.query = new Query();
local.query.setSql("
    SELECT id
    FROM myTable
    WHERE myTable.id = :id OR myTable.parentId = :id
");
local.query.addParam(name="id", cfsqltype="CF_SQL_INTEGER", value=arguments.id, maxlength=10);
local.query.execute().getResult();

如果我拿出OR myTable.parentId = :id它,它会很好地工作。我是否必须为我打算使用的每个位置创建一个参数?

4

1 回答 1

7

如果它是一个 CFQuery,那么每个值都有一个 cfqueryparam:

where myTable.id = <cfqueryparam... value="#arguments.id#" />
    or myTable.parentid = <cfqueryparam ... value="#arguments.id#" />

所以我猜你需要在脚本中做同样的事情:

local.query.setSql("
    SELECT id
    FROM myTable
    WHERE myTable.id = :id OR myTable.parentId = :pid "); 
local.query.addParam(name="id", cfsqltype="CF_SQL_INTEGER",value=arguments.id,maxlength=10); 
local.query.addParam(name="pid",cfsqltype="CF_SQL_INTEGER",value=arguments.id,maxlength=10); 

As for the question "why can't the one addParam address both placeholders" I'm guessing it comes down to how the query is parsed by ColdFusion - because you specify two param placeholders the parser probably expects to find two params defined.

于 2011-02-17T05:58:42.157 回答