我有一个Coldfusion组件,其中有一个名为 getColumnNames 的方法
这只是查询MySQL表,并返回列表:
remote string function getColumnNames() {
qProcessCars = new Query();
qProcessCars.setDataSource('#APPLICATION.dsn#');
qProcessCars.setSQL('SELECT * FROM sand_cars WHERE 1 LIMIT 1');
qProcessCars = qProcessCars.Execute().getResult();
return qProcessCars.columnlist;
}
如果我在浏览器中使用 page.cfc?method = getColumnNames 远程访问此页面,那么我会返回预期的列列表。
但是,如果我尝试从组件中的另一个方法内部访问它,我会收到错误
remote string function otherFunction() {
...
sColumns = getColumnNames();
...
}
上述代码的错误转储返回消息“找不到setSQL方法”。
所以任何人都可以帮助我找出它作为远程调用的原因,但不是从同一组件内的其他方法调用时。
答案 0 :(得分:2)
问题可能会导致某种竞争条件。如果你做几个干扰的调用,在某些时候qProcessCars可能已经是查询结果,所以调用方法是不可能的。
我会尝试将qProcessCars
变量设为局部范围(var qProcessCars = new Query();
)和/或尝试使用另一个变量名来查询结果。
接下来可能的步骤是将查询构建/执行代码包含在命名锁中。
答案 1 :(得分:0)
啊我再次回答了我自己的问题。遗憾。
我使用了相同的名称 qProcessCars 否则在组件中我没有将 var 放在它们前面。
我不知道为什么导致这个问题,但确实如此。也许每个查询对象只能调用 setSQL 一次?