这是一个有效的查询,用于返回用户表中用单引号括起来的电子邮件。
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/