Vai*_*esh 2 mysql sql coldfusion
我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
Run Code Online (Sandbox Code Playgroud)
当我直接在Mysql上运行它时查询工作正常,但是从coldfusion应用程序无效.我很难过!生成日期的代码是:
login_date >= STR_TO_DATE(
'#DateFormat(CreateODBCDate(startDate),'mm/dd/yyyy')#'
, '%m/%d/%Y'
)
Run Code Online (Sandbox Code Playgroud)
ColdFusion的错误是这样的:
您的SQL语法有错误; 检查与MySQL服务器版本对应的手册,以便在'01/16/2013'',''%m /%d /%Y''附近使用正确的语法,并且login_date <= STR_TO_DATE('''01/17/2013'',''%m /%d /'在第1行
这有什么不对?
编辑
我刚刚转储了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'')
Run Code Online (Sandbox Code Playgroud)
日期附近还有其他引号,它们导致了问题.如果我删除了我从代码中添加的额外内容,那么就不会添加任何内容.
(根据我之前的评论......)
应该绝对没有必要使用dateFormat或str_to_date.DateFormat专为演示而设计并返回一个字符串.你应该使用的是日期对象.CreateODBCDate已经给你了.所以只需在查询中直接使用它.(显然你应该首先验证输入)
WHERE column >= #CreateODBCDate(startDate)#
....
Run Code Online (Sandbox Code Playgroud)
..或者更好,使用cfqueryparam:
WHERE column >= <cfqueryparam cfsqltype="cf_sql_date" value="#startDate#">
Run Code Online (Sandbox Code Playgroud)