2013-03-05 70 views
5

我试图将NOW插入到MySQL表中。喜欢的东西:从Coldfusion在MSSQL中插入datetime

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

<cfquery name="qInsert" datasource="#dbanme#" > 
    INSERT INTO TableName(....,date_created, date_modified) 
    VALUES(...,'#datatime#', '#datatime#') 
</cfquery> 

但我收到以下错误:

Invalid JDBC timestamp escape

任何帮助吗?

+2

不在于它真的很重要,但它是一个MSSQL或MySQL表?你在问题中列出一个,在标题中列出另一个。这很重要,因为您可以使用MySQL的Now()函数或MSSQL的getDate()函数获取当前日期/时间,没有理由让CF执行此操作。 – Busches 2013-03-05 16:54:49

+0

'createODBCDateTime'返回一个日期时间对象。 DateTime对象不应被引用。 [这是什么导致你的语法错误](http://stackoverflow.com/questions/10057107/insert-date-and-time-into-mysql-with-coldfusion/10057405#10057405)。也就是说,正如其他人所建议的,你应该对所有可变参数值使用cfqueryparam。 – Leigh 2013-03-05 17:28:12

回答

0

插入SQL Server时,您不需要引用生成的ColdFusion时间戳。

具体地说就是,如果你建立你的时间戳作为一个字符串,使用日期格式和诸如此类的东西,你必须插入使用此格式:

INSERT INTO TABLE(DATE_COL) VALUES({ts '#dateInAStringFormat#'}) 

的日期ColdFusion的ODBCx功能做这一切为你工作,所以它只是:

INSERT INTO TABLE(DATE_COL) VALUES(#dateInAStringFormat#) 
10

让ColdFusion的写出来的数据为您服务 - 使用cfqueryparam。这里并不是绝对必要的,但是尽可能地使用它是一种很好的做法。除了保护你免受SQL注入之外,它还可以适当地格式化变量,所以你不必担心是否需要将值作为字符串或整数或任何其他值插入。

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

<cfquery name="qInsert" datasource="#dbanme#" > 
    INSERT INTO TableName(....,date_created, date_modified) 
    VALUES(..., 
     <cfqueryparam value="#datatime#" cfsqltype="cf_sql_timestamp">, 
     <cfqueryparam value="#datatime#" cfsqltype="cf_sql_timestamp"> 
    ) 
</cfquery> 
+0

你是不是指'cf_sql_timestamp'?因为使用'cf_sql_date'将删除任何时间部分并仅插入日期。 – Leigh 2013-03-05 17:31:37

+0

哎呀,是啊 - 习惯了我们自己的做法,我们把'date_xx'或'datetime_xx'命名为适当的东西 – 2013-03-05 17:48:53

+0

很酷,我觉得它只是一个错字:)感谢您更新它。 – Leigh 2013-03-05 17:55:23

3

如果你想使用内置的NOW功能,只是把它作为查询的一部分:

<cfquery name="qInsert" datasource="#dbname#" > 
    INSERT INTO TableName(....,date_created, date_modified) 
    VALUES(...,NOW(), NOW()) 
</cfquery> 
7

如果你想要的日期,没有时间,使用以下命令:

<cfquery name="qInsert" datasource="#dbanme#" > 
    INSERT INTO TableName(...., date_created, date_modified) 
    VALUES (... 
     , <cfqueryparam cfsqltype="cf_sql_date" value="#now()#"> 
     , <cfqueryparam cfsqltype="cf_sql_date" value="#now()#"> 
    ) 
</cfquery> 

cf_sql_date将删除任何时间,并根据您的字段类型只显示或00:00:00为时间值的日期或者日期。

如果你想与时间日期:

<cfquery name="qInsert" datasource="#dbanme#" > 
    INSERT INTO TableName (....,date_created, date_modified) 
    VALUES (... 
     , <cfqueryparam cfsqltype="cf_sql_timestamp" value="#now()#"> 
     , <cfqueryparam cfsqltype="cf_sql_timestamp" value="#now()#"> 
    ) 
</cfquery>