在Coldfusion和数据库之间传递DateTimes

时间:2015-03-05 20:26:05

标签: sql-server datetime coldfusion

我对Coldfusion和MSSQL的日期工作时间有点困惑

我构建了一个忘记密码的功能,可以创建一个只能在24小时内使用的临时密码。

因此,当用户请求新的临时密码时,我正在创建一个新密码并设置请求的时间:

<cfset datetime = CREATEODBCDATETIME( Now() ) />

然后我将时间放入数据库

UPDATE users
SET 
    tempPassword = '#newPassword#'
    tempPasswordCreated = #datetime#
WHERE login = <cfqueryparam cfsqltype="cf_sql_varchar" value="#form.login#">

然后当用户尝试使用临时密码登录时,我正在检查是否已经过了不到24小时。

<if checkAccounts.tempPassword eq form.password AND DateDiff("h", checkAccounts.tempPasswordCreated, CREATEODBCDATETIME( Now())) lt 24> 
    <!--- Login Code here--->
</cfif>

然而,

DateDiff("h", checkAccounts.tempPasswordCreated, CREATEODBCDATETIME( Now())) 

正在输出12,因为我提交表单后只有几分钟。

1 个答案:

答案 0 :(得分:3)

这是一个更适合您的简化版本:

UPDATE users
SET 
    tempPassword = <cfqueryparam value="#newPassword#" cfsqltype="cf_sql_varchar">
    , tempPasswordCreated = <cfqueryparam value="#now()#" cfsqltype="cf_sql_timestamp">
WHERE login = <cfqueryparam cfsqltype="cf_sql_varchar" value="#form.login#">

=

<cfif checkAccounts.tempPassword eq form.password 
    AND DateDiff("h", checkAccounts.tempPasswordCreated, now()) lt 24> 
    <!--- Login Code here--->
</cfif>

这假设您正在使用某种日期/时间字段类型。