【问题标题】:Coldfusion case generating an errorColdfusion 案例产生错误
【发布时间】:2014-04-09 23:23:10
【问题描述】:

我正在尝试解决我们的 Coldfusion 应用程序的问题。

我认为问题是这一行-:

<cfset discountAmountClause = 
"CASE WHEN discountAmount_rateType = 0 THEN #oldPrice# * discountAmount_discount / 100 
ELSE discountAmount_discount END">

来自应用程序的错误消息是您的 SQL 语法有错误;查看与您的 MySQL 服务器版本相对应的手册,了解在 '* discountAmount_discount / 100 ELSE discountAmount_discount END

附近使用的正确语法

我不确定代码是否存在问题或更严重的问题,所以如果有比我更有经验的人能提供一些启发,我将非常感激......

【问题讨论】:

  • ( #oldPrice# * discountAmount_discount ) / 100 ?
  • 查看发送到数据库的整个 SQL 语句。这是您引用的数据库错误,而不是 CF 错误(您也应该修改问题标题)
  • oldPrice 的值是多少?
  • 与错误本身无关,但使用动态 sql 可以将您的数据库暴露给 sql 注入。您应该强烈考虑重组您的查询以改用cfqueryparam
  • oldprice 的值是问题所在!我将发布一个完整的答案来解释。 @Leigh 我正在尝试处理所有查询并添加参数,但这是一个缓慢的过程......

标签: mysql coldfusion


【解决方案1】:

您的 oldPrice 变量具有 Null 或空白值,这会导致您的 sql 出错。 您可以有条件地调整它:

<cfif oldPrice EQ "">
    <cfset oldPrice = 0>
</cfif>
<cfset discountAmountClause = "CASE WHEN discountAmount_rateType = 0 
                               THEN  #oldPrice# * discountAmount_discount / 100 
                               ELSE discountAmount_discount 
                               END">

【讨论】:

  • 应该检查NOT isNumeric(oldPrice)或者使用val(oldPrice)
  • 同意,但在我们知道之前我们不能确定,但​​要进入 oldPrice 变量。但是由于 OP 在数值运算中使用它,它只是一个经过计算的猜测,它必须是数值,由于为 NULL 或 BLANK 可能会引发错误。
  • 谢谢@CFML_Developer 和彼得(再次!)。此 cfif 语句暴露了发生错误的数据库中的缺陷。我将在下面发布完整的答案。再次感谢。
【解决方案2】:

因此,经过进一步调查并感谢该线程中留下的 cmets 的帮助,我设法将错误追踪到 #oldprice# 变量。

我们调用#oldprice# 变量的页面不应该处于活动状态,因为该页面不存在#oldprice#。该页面的链接与 #oldprice# 变量一起包含在许多其他页面上,然后导致一堆页面出现 404 错误。

一旦我删除了问题页面,其他页面就可以正常工作并且停止生成错误。

由于该页面是 1679 年的页面之一,因此要找到它有点困难!但是,在此处提供的帮助下,我最终设法到达了那里。

谢谢!

【讨论】:

    猜你喜欢
    • 2016-07-03
    • 1970-01-01
    • 2019-02-21
    • 1970-01-01
    • 1970-01-01
    • 2019-11-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-15
    相关资源
    最近更新 更多