1

有点混乱的标题,但我会在这里尽量清楚。当在内部使用查询对象时<cfscript>,您的表单中有一些 sql:

 SELECT city + ', ' + state + ' ' + zip as Address2
 FROM users WHERE user_id = :userid

ColdFusion 将出错。:userid是我使用添加的参数,当我删除状态和 zip 之间addParam的查询时,查询工作得很好。' '出于某种原因,添加该空间会导致查询对象出现问题,并且它在:符号附近给了我不正确的语法。

当我简单地使用时,这个查询也可以正常工作<cfquery>,但我想在<cfscript>. 有任何想法吗?这是一个错误吗?还是我错过了什么?

编辑:我正在使用 Coldfusion 9,MS SQL 2005,这是在 CFC 内使用 cfscript 语法完成的。像这样:

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();
  }
}
4

2 回答 2

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>

在浏览器中运行它会返回一个正确连接的“全名”值。

碰巧,这段代码片段是否有助于发现完整 cfscript 查询中的任何异常情况?如果没有,您是否可以发布更多与设置查询服务相关的代码?

编辑:我还使用以下 'result =' 表达式运行它,使其更像您正在执行的连接:

result = qry.execute(sql="SELECT firstname + ', ' + lastname + ' ' + email AS fullname FROM mydb where userid = :userid");
于 2012-04-12T16:40:03.717 回答
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 的第三个参数来手动修复。

于 2012-04-12T19:17:55.463 回答