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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何使用ColdFusion检查数据库的值?相关的知识,希望对你有一定的参考价值。

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

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

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

如果用户添加相同的用户名,该网页将告诉用户该名称已被删除。你能告诉我怎么做到这一点吗?我只是不知道如何写if语句。

答案
  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>
另一答案

坚固的方式 - 带锁。这也确保你不能让两个人“同时”提交相同的用户名(如果他们使用相同的网站?),你最终会同时插入两个用户名。

<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查询以捕获故障。

以上是关于如何使用ColdFusion检查数据库的值?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用Coldfusion fileExist检查Amazon S3上是否存在文件?

如何正确使用 Coldfusion File Exist() 方法?

如何从 ColdFusion 查询循环中的返回值中检查空值

有人可以告诉我如何使用 ColdFusion 连接到 H2 数据库吗? [关闭]

Coldfusion 和非作用域变量

如何在cfcatch块中检查本机代码错误?