2013-03-05 32 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>