coldfusion – 为什么我在使用CFScript时不能在同一个查询中的两个位置使用相同的cfqueryparam?

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

此行为与CFML不一致.我只是重写了一个从CFML到CFScript的类似查询,我收到以下错误:cfsqlparam’id’未定义

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,它的效果非常好.我是否必须为我打算使用的每个位置创建一个参数?

最佳答案
如果是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); 

至于“为什么一个addParam不能解决这两个占位符”的问题我猜它归结为ColdFusion如何解析查询 – 因为你指定了两个param占位符,解析器可能希望找到两个定义的参数.

转载注明原文:coldfusion – 为什么我在使用CFScript时不能在同一个查询中的两个位置使用相同的cfqueryparam? - 代码日志