Moh*_*mad 4 coldfusion coldfusion-9
我不确定我是否做错了,但是如果你在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();
Run Code Online (Sandbox Code Playgroud)
如果我取出OR myTable.parentId = :id
它,它的效果非常好.我是否必须为我打算使用的每个位置创建一个参数?
如果是CFQuery,那么每个值都有一个cfqueryparam:
where myTable.id = <cfqueryparam... value="#arguments.id#" />
or myTable.parentid = <cfqueryparam ... value="#arguments.id#" />
Run Code Online (Sandbox Code Playgroud)
所以我猜你需要在脚本中做同样的事情:
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);
Run Code Online (Sandbox Code Playgroud)
至于"为什么一个addParam不能解决这两个占位符"的问题我猜它归结为ColdFusion如何解析查询 - 因为你指定了两个param占位符,解析器可能希望找到两个定义的参数.