【问题标题】:How to stop my coldfusion Cfquery from insertering duplicate rows?如何阻止我的coldfusion Cfquery插入重复行?
【发布时间】:2016-12-15 18:28:09
【问题描述】:

我有一个非常基本的 cfquery insert,它在提交时插入我的表单信息 3 次。

有人知道如何阻止这种情况吗?

这是我的表格。

http://jsfiddle.net/DTcHh/27952/

表单发送到的我的页面包含以下cfquery:

    <cfquery datasource="OSAnet-College" result="qDonate">
        INSERT into V2_OnlineDonations(FNAME,LNAME,PHONE,EMAIL,CAUSE,DATEDONATE)
        VALUES (
        <cfqueryparam cfsqltype="cf_sql_varchar" value="#FORM.FNAME#">
        , <cfqueryparam cfsqltype="cf_sql_varchar" value="#FORM.LNAME#">
        , <cfqueryparam cfsqltype="cf_sql_varchar" value="#FORM.PHONE#">
        , <cfqueryparam cfsqltype="cf_sql_varchar" value="#FORM.EMAIL#">
        , <cfqueryparam cfsqltype="cf_sql_varchar" value="#FORM.CAUSE#">
        , <cfqueryparam cfsqltype="cf_sql_timestamp" value="#NOW()#">
        )
    </cfquery>

任何帮助将不胜感激。

【问题讨论】:

  • 考虑一个 SQL Merge 语句。这样,它将根据需要执行 INSERT 或 UPDATE。见:stackoverflow.com/questions/14806768/…
  • 需要查看更多代码,例如正在执行的 cfc 函数以及如何调用该函数。小提琴链接当前会产生一堆错误。
  • 我的想法是,您确实无法控制用户将哪些数据放入表单。因此使数据库交互更智能。 MERGE 有一个 INSERT 部分,它将作为普通插入的替代品。
  • 我的意思是……如果表单提交3次,就会插入3条记录。您是否想防止重复记录,无论是故意还是重复提交?在您的情况下,由于使用了#now()#,它们可能并不是真正的重复。对 email/first/last 的约束以强制它们是唯一的将防止被欺骗,不是吗?
  • 就像@snackboy 说的,你需要展示更多的代码。该查询本身不是问题,因此它必须是调用该查询的任何内容

标签: coldfusion


【解决方案1】:

试试这样的:

<cfquery datasource="OSAnet-College" result="qDonate">
IF 
(
    NOT EXISTS
    (
        SELECT * FROM V2_OnlineDonations 
        WHERE FNAME = <cfqueryparam cfsqltype="cf_sql_varchar" value="#FORM.FNAME#">
        AND LNAME = <cfqueryparam cfsqltype="cf_sql_varchar" value="#FORM.LNAME#">
        AND PHONE = <cfqueryparam cfsqltype="cf_sql_varchar" value="#FORM.PHONE#">
        AND EMAIL = <cfqueryparam cfsqltype="cf_sql_varchar" value="#FORM.EMAIL#">
        AND CAUSE = <cfqueryparam cfsqltype="cf_sql_varchar" value="#FORM.CAUSE#">
    ) 
)
BEGIN 
    INSERT into V2_OnlineDonations(FNAME,LNAME,PHONE,EMAIL,CAUSE,DATEDONATE)
    VALUES (
    <cfqueryparam cfsqltype="cf_sql_varchar" value="#FORM.FNAME#">
    , <cfqueryparam cfsqltype="cf_sql_varchar" value="#FORM.LNAME#">
    , <cfqueryparam cfsqltype="cf_sql_varchar" value="#FORM.PHONE#">
    , <cfqueryparam cfsqltype="cf_sql_varchar" value="#FORM.EMAIL#">
    , <cfqueryparam cfsqltype="cf_sql_varchar" value="#FORM.CAUSE#">
    , <cfqueryparam cfsqltype="cf_sql_timestamp" value="#NOW()#">
    )
END
</cfquery>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-03-12
    • 2023-03-28
    • 1970-01-01
    • 2013-01-11
    • 1970-01-01
    • 2012-04-02
    • 1970-01-01
    相关资源
    最近更新 更多