我在一个timestamp表中有一个MySQL字段。我试图使用以下SQL查询查询该表:
SELECT login_mode,count(login_mode) as total
FROM login_activity,ccac_registered_users
WHERE login_activity.student_id=ccac_registered_users.student_id
AND login_date >= STR_TO_DATE('01/16/2013','%m/%d/%Y')
AND login_date <= STR_TO_DATE('01/17/2013','%m/%d/%Y')
GROUP BY login_mode当我直接在Mysql上运行它时,这个查询工作得很好,但是在coldfusion应用程序中不起作用。我被困住了!生成日期的代码是:
login_date >= STR_TO_DATE(
'#DateFormat(CreateODBCDate(startDate),'mm/dd/yyyy')#'
, '%m/%d/%Y'
)ColdFusion的错误是:
您的SQL语法有错误;请检查与MySQL服务器版本相对应的手册,以获得在“01/16/2013”、“%m/%d/%Y”和login_date <= STR_TO_DATE(‘01/17/2013“、’%m/%d/‘)附近使用的正确语法。
这里怎么了?
编辑
我刚刚转储了CF试图执行的sql。
SELECT login_mode,count(login_mode) as total
FROM login_activity,ccac_registered_users
WHERE login_activity.student_id=ccac_registered_users.student_id
AND login_date >= STR_TO_DATE(''01/16/2013'',''%m/%d/%Y'')
AND login_date <= STR_TO_DATE(''01/17/2013'',''%m/%d/%Y'') 有更多的报价左右的日期,他们是造成问题。如果删除代码中添加的额外内容,则不会添加任何内容。
发布于 2013-01-23 20:09:15
CFQUERY喜欢自动转义单引号。要让它按照您编写的方式工作,您需要用preserveSingleQuotes()包装东西,以防止CF添加额外的单引号。或者使用其他日期比较建议之一重写它。
发布于 2013-01-23 19:59:12
(从我之前的评论.)
绝对没有必要使用dateFormat或str_to_date。DateFormat是为表示设计的,并返回一个字符串。您应该使用的是日期对象。CreateODBCDate已经给了你这个机会。所以只需在查询中直接使用它。(显然,您应该始终首先验证输入。)
WHERE column >= #CreateODBCDate(startDate)#
....。。或者更好的方法是使用cfqueryparam:
WHERE column >= <cfqueryparam cfsqltype="cf_sql_date" value="#startDate#">发布于 2013-01-23 19:56:27
使用查询参数和日期对象而不是字符串。如下所示:
AND login_date >= <cfqueryparam cfsqltype="cf_sql_date" value="#CreateDate(2013,1,16)#">
AND login_date <= <cfqueryparam cfsqltype="cf_sql_date" value="#CreateDate(2013,1,17)#">https://stackoverflow.com/questions/14487963
复制相似问题