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

をしませんか?あなたは質問に1つを、タイトルにはもう1つをリストアップします。現在の日付/時刻を取得するには、MySQLの 'Now()'関数やMSSQLの 'getDate()'関数を使用することができます。 – Busches

+0

'createODBCDateTime'はdatetimeオブジェクトを返します。 DateTimeオブジェクトは引用しないでください*。 [それは構文エラーの原因となっている](http://stackoverflow.com/questions/10057107/insert-date-and-time-into-mysql-with-coldfusion/10057405#10057405)。つまり、すべての可変パラメータ値に対して実際にcfqueryparamを使用するべきであると提案した人もいます。 – Leigh

答えて

0

SQL Serverに挿入するときに、生成されたColdFusionタイムスタンプを引用符で囲む必要はありません。詳述すると

、あなたがたDateFormatやその他もろもろを使用して、文字列として、あなたのタイムスタンプを構築する場合、あなたはこのフォーマットを使用して挿入する必要があります。

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

のColdFusion ODBCx機能日付のはあなたのためにこのすべての作業を行います - cfqueryparamを使用して

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

レッツColdFusionがあなたのためにデータを書き出す:、それだけだそう。これは絶対に本質的なことではありませんが、できる限り毎回使用することをお勧めします。 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

+0

私たちが 'date_xx'または' datetime_xx'のいずれかを適切に指定している私たち自身の習慣の中でうんざりしています。 –

+0

クールで、それはちょうどタイプのタイプミスでした:)それを更新していただきありがとうございます。 – Leigh

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でのみ日付または日付のいずれかあなたのフィールドタイプのショーに依存します。

あなたは、時間と日付たい場合は:それは本当に重要、それはMSSQLまたはMySQLのテーブルであることを

<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> 
関連する問題