2013-03-05 2 views
5

Я пытаюсь вставить NOW в таблицу MySQL. Что-то вроде:Вставка даты и времени в MSSQL из Coldfusion

<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? Вы указываете один в вопросе, а другой - в названии. Это имеет значение, так как вы можете использовать функцию 'Now()' MySQL или функцию 'getDate()' MSSQL' для получения текущей даты/времени, без каких-либо причин сделать CF. – Busches

+0

'createODBCDateTime' возвращает объект datetime. Объекты DateTime должны указывать * not *. [Это то, что вызывает синтаксическую ошибку] ​​(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 для дат делать всю эту работу за вас , так что это просто:

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

+0

oops, yeah - привычка из наших собственных практик, где мы называем вещи «date_xx» или «datetime_xx» соответственно –

+0

Прохладный, я полагал, что это была просто типовая сортировка :) Спасибо, что обновили ее. – Leigh

3

Если вы хотите использовать встроенную в систему функцию, просто включите его как часть запроса:

<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> 
Смежные вопросы