如何使用ColdFusion检查数据库的值?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何使用ColdFusion检查数据库的值?相关的知识,希望对你有一定的参考价值。
现在,我正在使用ColdFusion添加用户:
<cfquery name="adduser" datasource="music" dbtype="ODBC">
insert into register values('#username#','#password#')
</cfquery>
如果用户添加相同的用户名,该网页将告诉用户该名称已被删除。你能告诉我怎么做到这一点吗?我只是不知道如何写if语句。
答案
- 查询具有相同用户名的所有用户,例如您要保存的用户(出于性能目的,您最多需要1行来证明它已存在):
<cfquery name="checkuseralreadythere" datasource="music"> SELECT username FROM register WHERE username = <cfqueryparam cfsqltype="cf_sql_varchar" value="#username#"> LIMIT 1 </cfquery>
- 用于检查结果的程序逻辑
<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() 方法?