【问题标题】:Coldfusion sql error only occurring on one instance of appColdfusion sql错误仅发生在一个应用程序实例上
【发布时间】:2013-03-21 22:06:42
【问题描述】:

我正在运行同一个应用程序的两个实例,但只有一个实例在尝试显示未标记的图像时出现错误。

日志说:

执行数据库查询时出错。您的 SQL 语法有误; 检查与您的 MySQL 服务器版本相对应的手册 在第 3 行的 '' 附近使用正确的语法 文件的特定序列 包括或处理的是: [模糊]...images_archive.cfm, 行:24

这个文件的第 24 行是:

WHERE <cfloop query="unlabeledTags">tagID <> #ID#<cfif #currentRow# NEQ #recordCount#> AND </cfif></cfloop>

非常感谢任何帮助

【问题讨论】:

  • 请记住行号是近似值。但是如果unlabeledTags 查询是空的,你最终会得到WHERE (nothing after it),这肯定会导致语法错误。但这只是一个猜测。没有看到生成的sql和所涉及的变量的值,是不可能说出来的。

标签: mysql coldfusion cfml


【解决方案1】:

就像 Leigh 说的,您的问题可能与空查询集有关,但为了稍微清理一下您的代码,我建议您像这样编写 SQL。

WHERE tagID NOT IN (<cfqueryparam cfsqltype="cf_sql_integer" value="#ValueList(unlabeledTags.ID)#" list="true">)

或者你也可以这样写

WHERE 1 = 1
<cfloop query="unlabeledTags">
    AND tagID <> <cfqueryparam cfsqltype="cf_sql_integer" value="#unlabeledTags.ID#">
</cfloop>

仅当您的查询有记录计数时才允许查询运行。

【讨论】:

  • ... 你应该使用cfqueryparam。如果您使用NOT IN (...) 方法,只需添加list=true 属性即可。
  • 如果查询集为空,这种方式也会报错。
  • @DanBracuk Only allow the query to run when you have a recordcount on your query though.
  • 感谢所有帮助 - 将尝试这个 + 清理(从另一个程序员继承),然后会更新。
  • 您的单行建议已解决 - 非常感谢您的回答和建议
猜你喜欢
  • 1970-01-01
  • 2020-05-12
  • 1970-01-01
  • 2010-09-29
  • 1970-01-01
  • 2016-10-25
  • 2021-05-08
  • 2016-06-03
  • 1970-01-01
相关资源
最近更新 更多