SQLF在ColdFusion组件中的cfscript内的查询对象中的单引号

时间:2012-04-12 15:42:28

标签: coldfusion hql cfc

有点令人困惑的标题,但我会在这里试着说清楚。在<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();
  }
}

2 个答案:

答案 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来手动修复。