3

我完全迷失在这里。

MySQL 数据库中有一个“日期时间”类型的字段。我想用 ColdFusion 程序生成的日期时间填充它。我发现必须使用 CreateODBCDateTime 转换为属性格式,以便 MySQL 接受它,所以...

<cfset myDateTime = CreateODBCDateTime("07-04-2012 20:11:00")>

稍后的某个地方:

<cfquery name="qAddDate">
    INSERT INTO some_table
    (`date`)
    VALUES
    ('#myDateTime#')
</cfquery>

但是,尝试将数据发送到数据库时出现此错误:

您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 8 行的 '2012-07-04 20:11:00'}')' 附近使用正确的语法

第 8 行是带日期的行:

INSERT INTO some_table
(`date`)
VALUES
('{ts '2012-07-04 20:11:00'}')

有人可以帮忙吗?

谢谢。

4

3 回答 3

10

您不需要在日期对象周围加上引号,只需要字符串。删除引号应该可以解决您的语法错误:

  INSERT INTO some_table (`date`)
  VALUES ( #myDateTime# )

虽然你应该养成使用的习惯cfqueryparam

  INSERT INTO some_table (`date`)
  VALUES ( <cfqueryparam value="#myDateTime#" cfsqltype="cf_sql_timestamp"> )

...或者,如果它是有效/可解析的美国日期字符串,您可以跳过 createODBCDate 并使用:

  INSERT INTO some_table (`date`)
  VALUES ( <cfqueryparam value="07-04-2012 20:11:00" cfsqltype="cf_sql_timestamp"> )
于 2012-04-07T19:00:17.960 回答
0

这些看起来像“倒勾”,这会导致问题。当然,我没用过MySQL,所以不能肯定。

(`date`)

你应该能够做到这一点:

INSERT INTO some_table(date)
VALUES ('{ts '2012-07-04 20:11:00'}')
于 2012-04-07T18:35:20.453 回答
0

以下代码片段和输出显示(在帖子底部)

使用 ColdFusion 10 显示 MySQL 日期字段插入和更新。

<CFOUTPUT>

  <CFSET mLST_UPDT = CreateODBCDate("07/04/2012")>

  Date for SQL Insert = #mLST_UPDT# <br>

<!---- INSERT code without use of cfqueryparam ---->
<CFQUERY NAME="TAB_INSERT" DATASOURCE="HELMSFARMS">
INSERT INTO DATE_TABLE (LST_UPDT) VALUES (#mLST_UPDT#)
</CFQUERY>

<!---- INSERT code using cfqueryparam ---->
<CFQUERY NAME="TAB_INSERT" DATASOURCE="HELMSFARMS">
INSERT INTO DATE_TABLE
(LST_UPDT)
VALUES (<cfqueryparam value="#mLST_UPDT#" cfsqltype="cf_sql_date"> ) 
</CFQUERY>

<!---- Getting and Displaying results of INSERT ---->
<CFQUERY NAME="GET_DATES1" DATASOURCE="HELMSFARMS">
SELECT LST_UPDT FROM DATE_TABLE  
</CFQUERY>

<CFLOOP QUERY="GET_DATES1">
#CURRENTROW#. #GET_DATES1.LST_UPDT# #dateformat(GET_DATES1.LST_UPDT,"mm/dd/yyyy")#
<br>
</CFLOOP>

<!---- Code that uses UPDATE on the records INSERTED above ---->
<cfset mNXT_UPDT = CreateODBCDate("08/05/2014")>
<br>
Date for SQL Update = #mNXT_UPDT# <br>

<!---- UPDATE code using cfqueryparam ---->
<CFQUERY NAME="GET_DATES2" DATASOURCE="HELMSFARMS">
UPDATE DATE_TABLE SET
LST_UPDT = <cfqueryparam value="#mNXT_UPDT#" CFSQLType="cf_sql_date" > 
</CFQUERY>

<CFQUERY NAME="GET_DATES2" DATASOURCE="HELMSFARMS">
SELECT LST_UPDT FROM DATE_TABLE  
</CFQUERY>

<CFLOOP QUERY="GET_DATES2">
#CURRENTROW#. #GET_DATES2.LST_UPDT# #dateformat(GET_DATES2.LST_UPDT,"mm/dd/yyyy")#<br>
</CFLOOP>

</CFOUTPUT>  

<!----- Results of running above code 
Used a MySQL table named DATE_TABLE with 
one Date Field named LST_UPDT
--------------------------------------
Date for SQL Insert = {d '2012-07-04'} 
1. {ts '2014-08-05 00:00:00'} 08/05/2014
2. {ts '2014-08-05 00:00:00'} 08/05/2014
3. {ts '2014-08-05 00:00:00'} 08/05/2014
4. {ts '2014-08-05 00:00:00'} 08/05/2014
5. {ts '2012-07-04 00:00:00'} 07/04/2012
6. {ts '2012-07-04 00:00:00'} 07/04/2012
Date for SQL Update = {d '2014-08-05'} 
1. {ts '2014-08-05 00:00:00'} 08/05/2014
2. {ts '2014-08-05 00:00:00'} 08/05/2014
3. {ts '2014-08-05 00:00:00'} 08/05/2014
4. {ts '2014-08-05 00:00:00'} 08/05/2014
5. {ts '2014-08-05 00:00:00'} 08/05/2014
6. {ts '2014-08-05 00:00:00'} 08/05/2014
---->
于 2014-02-09T07:40:32.593 回答