有点令人困惑的标题,但我会在这里试着说清楚。在<cfscript>
中使用查询对象时,您在表单中有一些sql:
SELECT city + ', ' + state + ' ' + zip as Address2
FROM users WHERE user_id = :userid
ColdFusion会出错。 :userid
是我使用addParam
添加的参数,当我删除状态和zip之间的' '
时,查询工作正常。由于某种原因,添加该空格导致查询对象失控,并且它在:
符号附近给出了错误的语法。
当我只使用<cfquery>
时,此查询也可以正常工作,但我想在<cfscript>
中使用它。有任何想法吗?这是一个错误吗?或者我错过了什么?
编辑:我正在使用Coldfusion 9,MS SQL 2005,这是使用cfscript语法在CFC内部完成的。像这样:
component
{
public function getAgent(member_id)
{
qryAgent = new query(dataSource="Members");
qryAgent.setName("get_agent");
qryAgent.addParam(name="memberid",value=member_id,cfsqltype="CF_SQL_INTEGER");
result = qryAgent.execute(sql="SELECT FirstName, LastName, FirstName + ' ' + LastName as FullName FROM Member m WHERE m.member_id = :memberid");
return result.getResult();
}
}
答案 0 :(得分:1)
从发布的代码中,您的语法对于MS SQL看起来很稳定。我在安装了ACF 9和MS SQL Server 2008的本地盒子上运行了以下测试(我知道你在2005年,但它应该像字符串连接一样)。
<cfscript>
qry = new query();
qry.setDatasource("mydsn");
qry.setName("myqry");
qry.addParam(name="userid",value="3735",cfsqltype="cf_sql_integer");
result = qry.execute(sql="SELECT firstname + ' ' + lastname AS fullname FROM mydb where userid = :userid");
writeDump(result);
</cfscript>
在浏览器中运行此命令会返回正确连接的“fullname”值。
这个代码片段是否有助于发现完整cfscript查询中的任何异常?如果没有,您是否可以发布与设置查询服务相关的更多代码?
编辑:我还使用以下'result ='表达式运行它,使其更像你正在进行的连接:
result = qry.execute(sql="SELECT firstname + ', ' + lastname + ' ' + email AS fullname FROM mydb where userid = :userid");
答案 1 :(得分:1)
经过调试并找到答案后,我发现其他人已经在这里找到了这个:http://forums.adobe.com/thread/683656?tstart=-4而adobe已将其修复为CF 9.0.1
问题出现在ColdFusion9 \ CustomTags \ com \ adobe \ coldfusion \ query.cfc文件夹中的query.cfc文件中。 replaceDelimsWithMarkers函数调用listtoarray(我的版本中的第346行)。这个调用没有将第三个参数includeEmptyFields设置为true,这导致我的sql字符串被破坏。
可以通过添加第三个参数true来手动修复。