coldfusion - 这是 cfscript 中的 ColdFusion 错误吗?

标签 coldfusion coldfusion-9 coldfusion-10

这是一个有效的查询,用于返回用户表中用单引号括起来的电子邮件。

SELECT  '''' +email + '''' as email
FROM    users
where fname = @fname

然而,当我尝试在这样的 cfscript (cf9) 查询中执行此操作时:

var q = new Query(datasource="warewithal");
q.setSQL("SELECT  '''' +email + '''' as email
                FROM users where firstName= :firstName ");
q.addParam(name="firstName", value=trim(firstName), cfsqltype="cf_sql_varchar");

我最终得到的是

Email
+email+

在我预期的时候(并通过在分析器中运行查询获得)

Email
'bozo@clowns.com'

cfscript 正在执行 perserveSingleQuote 并且不允许我将单引号添加到输出。

这是错误还是我做错了什么?

最佳答案

回答标题中的问题:不,这不是 CFScript 中的错误。您所演示的内容与 CFScript 完全无关。

但是要回答您的意思要问的问题:是的,您在 Query.cfc 中发现了一个错误。

下面是一些演示该错误的代码(并证明它与 CFScript 无关,而与 Query.cfc 相关)。

这段代码工作正常:

<cfset query = new Query(datasource="scratch_mssql")>
<cfset query.setSql("
    SELECT  '''' + email + '''' as email
    FROM    users
    WHERE   firstName = '#firstName#'   
")>
<cfset emailAddresses = query.execute().getResult()> 
<cfdump var="#emailAddresses#">

请注意,我已将过滤器值硬编码到 SQL 字符串中。呸。

此代码错误:

<cfset query = new Query(datasource="scratch_mssql")>
<cfset query.setSql("
    SELECT  '''' + email + '''' as email
    FROM    users
    WHERE   firstName = :firstname  
")>
<cfset query.addParam(name="firstname", value=firstName, cfsqltype="CF_SQL_VARCHAR")>
<cfset emailAddresses = query.execute().getResult()> 
<cfdump var="#emailAddresses#">

我的错误是:

[Macromedia][SQLServer JDBC Driver][SQLServer]对象或列名丢失或为空。 对于 SELECT INTO 语句,验证每个列都有一个名称。对于其他语句, 寻找空的别名。不允许定义为 ""或 [] 的别名。将别名更改为有效名称。

仅供引用:CF 传递给数据库的 SQL 是:

SELECT  '' '' + email + '' '' as email FROM users WHERE firstName = (param 1)

为了证明它是由 ColdFusion 错误处理您的单引号引起的,这是有效的:

<cfset query = new Query(datasource="scratch_mssql")>
<cfset query.setSql("
    SELECT  email as email
    FROM    users
    WHERE   firstName = :firstname  
")>
<cfset query.addParam(name="firstname", value=firstName, cfsqltype="CF_SQL_VARCHAR")>
<cfset emailAddresses = query.execute().getResult()> 
<cfdump var="#emailAddresses#">

所以我会提出 bug为此,如果我是你。注意:在CF9.0.2和CF10.0.7上是一样的

但是,同样……如果我是你,我无论如何都不会把那些引语放在那里。除非有充分的理由,否则请在进行显示时将其插入,而不是在进行数据处理时。我猜它们是为了展示目的?

关于coldfusion - 这是 cfscript 中的 ColdFusion 错误吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14408774/

相关文章:

mysql - Coldfusion中如何对mysql数据库进行加密和使用

mysql - 这个 coldfusion9 SQL 搜索查询可以更快吗?

json - ColdFusion:如何检查JSON属性是否为null?

ColdFusion 遍历具有空/未定义字段的数组

coldfusion - 如何确定列表中的给定单词或短语是否在 anchor 标记内?

winforms - 将非 .NET DLL 添加到 ColdFusion

mysql - ColdFusion QOQ,比较时间值?

coldfusion - 我们可以在 cftransaction 中编写的数量查询/语句是否有任何限制?

coldfusion - 在 Coldfusion 中传递具有属性的类/组件

coldfusion - 如何在 ColdFusion 中将科学计数法转换为十进制?