首页 > 解决方案 > 如何使用 ColdFusion 检查数据库的值?

问题描述

现在,我正在使用 ColdFusion 添加用户:

<cfquery name="adduser" datasource="music" dbtype="ODBC">

    insert into register values('#username#','#password#')
</cfquery>

如果用户添加相同的用户名,网页将告诉用户该名称已被使用。你能告诉我如何实现这一目标吗?我只是不知道如何写 if 语句。

标签: databasecoldfusioncoldfusion-2018

解决方案


稳健的方式 - 带锁。这也确保了您不能让两个人“同时”提交相同的用户名(如果他们使用的是同一个网站?)并且您最终将两者都插入。

<cfquery name="adduser">
    INSERT 
    INTO Register(Username,Password)
    OUTPUT INSERTED.Username
    SELECT 
        <cfqueryparam cfsqltype="cf_sql_varchar" value="#Username#" />, 
        <cfqueryparam cfsqltype="cf_sql_varchar" value="#Password#" />
    WHERE <cfqueryparam cfsqltype="cf_sql_varchar" value="#Username#" /> NOT IN (
        SELECT Username
        FROM Register
        WITH(ROWLOCK, UPDLOCK, SERIALIZABLE)
        WHERE Username = <cfqueryparam cfsqltype="cf_sql_varchar" value="#Userame#" />
   )
</cfquery> 

<cfif adduser.RecordCount EQ 1>
    <!--- success ---->
<cfelse>
    <!--- failure ---->
</cfif>

由于插入可能由于不同的原因而失败,如果你真的想确定,在失败“cfelse”中你可以添加一个查询来检查用户名是否存在。

您还应该考虑使该数据库字段唯一,因此 INSERT 将失败 - 但在这种情况下,您必须尝试捕获查询以捕获失败。


推荐阅读