在 Coldfusion 和数据库之间传递日期时间
Passing DateTimes between Coldfusion and Database
我对日期时间在 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。
这里有一个应该适合您的更简化的版本:
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>
这是假设您正在使用某种 date/time 字段类型。
我对日期时间在 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。
这里有一个应该适合您的更简化的版本:
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>
这是假设您正在使用某种 date/time 字段类型。