【问题标题】:cfquery param on query containing if statment包含 if 语句的查询中的 cfquery 参数
【发布时间】:2012-06-11 22:18:13
【问题描述】:

你如何在这行代码中使用 cfqueryparam?

SET mailing_list = <CFIF IsDefined("FORM.mailing_list")>#FORM.mailing_list#<CFELSE>0</CFIF>

【问题讨论】:

    标签: coldfusion cfquery


    【解决方案1】:

    像这样:

    SET mailing_list = <CFIF IsDefined("FORM.mailing_list")>
        <cfqueryparam value="#FORM.mailing_list#" cfsqltype="cf_sql_integer" />
    <CFELSE>
        0
    </CFIF>
    


    在最近的 CFML 引擎上,您可以使用三元条件运算符:

    SET mailing_list = <cfqueryparam value="#IsDefined("FORM.mailing_list") ? FORM.mailing_list : 0#" cfsqltype="cf_sql_integer" />
    

    (虽然这里的可读性可能会降低。)


    最好的方法是最有可能将其参数化到您的查询之上并避免任何如果完全...

    <cfparam name="Form.mailing_list" default="0" />
    
    ...
    
    SET mailing_list = <cfqueryparam value="#FORM.mailing_list#" cfsqltype="cf_sql_integer" />
    

    【讨论】:

    • 第二种方法也意味着只有一个查询进入数据库进行解析。只有绑定变量的值会改变。
    • 我也喜欢第二种方法 - 我会在 value="#val(form.mailing_list)#" 中添加一个“val()”以确保非数字字符确实会引发错误。
    【解决方案2】:

    您只需使用两个单独的 cfqueryparam

    SET mailing_list = 
    <cfif StructKeyExists(form,'mailing_lis't)>
      <cfqueryparam cfsqltype="cf_sql_varchar" value "#FORM.mailing_list#" />
    <cfelse>
      0
    </cfif>
    

    【讨论】:

    • 这比其他示例更简洁、更易读。
    【解决方案3】:

    我通常使用IIF 来表示简短的 IF 语句:

    SET mailing_list = <cfqueryparam value="#iif(IsDefined("form.mailing_list"), form.mailing_list, 0)#" cfsqltype="cf_sql_integer" />
    

    否则我更喜欢“长而干净”的方式:

    <CFIF IsDefined("FORM.mailing_list")>
       SET mailing_list = <cfqueryparam value="#FORM.mailing_list#" cfsqltype="cf_sql_integer" />
    <CFELSE>
       SET mailing_list = <cfqueryparam value="0" cfsqltype="cf_sql_integer" />
    </CFIF>
    

    【讨论】:

    • 不要忘记将第二个条件包含在de() 中,以免表单字段不存在时出错。
    猜你喜欢
    • 2021-08-03
    • 1970-01-01
    • 2013-02-22
    • 2012-07-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-13
    相关资源
    最近更新 更多