使用cfif的ColdFusion动态SQL

use*_*498 3 coldfusion

我正在尝试编写一个查询,该查询将接受从另一个页面传递的4个可能参数中的一个.用户将选择这些参数中的一个进行搜索,然后查询将根据传递的参数评估选择了哪些参数.我正在尝试使用cfif来实现这一点但我必须遗漏一些东西.也许是一个cfelse,和OR,或者我可能会离开.这会像cffunction一样好吗?我得到一个错误"变量DivisionCode"是未定义的.谢谢.

<cfquery name="Summary" datasource="dsn">
    SELECT
        *
    FROM
        disposal
    WHERE 1=1

    <cfif DivisionCode NEQ "false">
    AND DivisionCode = <cfqueryparam value="#url.DivisionCode#" 
   cfsqltype="cf_sql_varchar">
   </cfif>
   <cfif DistrictCode NEQ "false">
    AND DistrictCode = <cfqueryparam value="#url.DistrictCode#" 
   cfsqltype="cf_sql_varchar">
   </cfif>
   <cfif SiteCode NEQ "false">
    AND SiteCode = <cfqueryparam value="#url.SiteCode#" 
   cfsqltype="cf_sql_varchar">
  </cfif>
  <cfif RegionCode NEQ "false">
    AND RegionCode = <cfqueryparam value="#url.RegionCode#" 
  cfsqltype="cf_sql_varchar">
  </cfif>
  ORDER By
    CYear DESC
  </cfquery>
Run Code Online (Sandbox Code Playgroud)

Ste*_*ant 6

我会查看变量范围和检查以确保变量存在.那么,让我们看看你的一个条件.

<cfif StructKeyExists(url,"DivisionCode") AND url.DivisionCode NEQ "false">
   AND DivisionCode = <cfqueryparam value="#url.DivisionCode#" cfsqltype="cf_sql_varchar">
 </cfif>
Run Code Online (Sandbox Code Playgroud)

添加"网址"."DivisionCode"之前的前缀将指定您查找变量的范围.这不会直接帮助您解决问题,但它会使您的代码更清晰,错误消息更有帮助.

添加StructKeyExists()检查以确保该变量在URL中可用.根据你编写代码的方式,我猜你不想按照未包含的URL变量进行过滤,这样就可以解决这个问题.

在每个cfif做同样的事情你应该是正确的下雨.