如何使用ColdFusion检查数据库的值?

时间:2019-04-26 14:31:35

标签: database coldfusion coldfusion-2018

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

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

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

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

2 个答案:

答案 0 :(得分:1)

  1. 使用与要保存的用户名相同的用户名查询所有用户(出于性能目的,您最多需要1行来证明它已经存在):

    <cfquery name="checkuseralreadythere" datasource="music">
       SELECT username 
       FROM   register 
       WHERE  username = <cfqueryparam cfsqltype="cf_sql_varchar" 
                            value="#username#"> 
      LIMIT 1
    </cfquery>
    
  2. 检查结果的程序逻辑

    <cfif checkuseralreadythere.recordcount GTE 1>
       <!--- user is already there --->
       Username is already taken. please enter an other username.
       <cflocation url="samepage.cfm?err=1">
        ...do more stuff...
    <cfelse>
       <!--- user is not there yet --->
       <cfquery name="adduser" datasource="music">
          INSERT INTO register 
          VALUES (
               <cfqueryparam cfsqltype="cf_sql_varchar" 
                            value="#username#"> 
               , <cfqueryparam cfsqltype="cf_sql_varchar" 
                            value="#password#">
           )
       </cfquery>
       ...do more stuff...
    </cfif>
    

答案 1 :(得分:1)

可靠的方法-带锁。 这还可以确保您不能让两个人“同时”提交相同的用户名(如果他们使用的是同一网站?),而您最终将两者都插入了。

<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”中添加查询以检查用户名是否存在。

您还应该考虑使该DB字段为UNIQUE,这样INSERT将会失败-但在这种情况下,您必须对查询进行TRY-CATCH才能捕获失败。