2013-03-05 10 views
5

Tôi đang cố chèn NOW vào bảng MySQL. Một cái gì đó như:Chèn ngày giờ trong MSSQL từ Coldfusion

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

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

Nhưng tôi nhận được lỗi sau:

Invalid JDBC timestamp escape

Bất kỳ sự giúp đỡ?

+2

Không phải là nó thực sự quan trọng, nhưng nó là một MSSQL hoặc một bảng MySQL? Bạn liệt kê một câu hỏi và câu hỏi còn lại trong tiêu đề. Đây là vấn đề khi bạn có thể sử dụng hàm 'Now()' của MySQL hoặc hàm 'getDate()' của MSSQL để có được ngày/giờ hiện tại, không có lý do để CF làm điều đó. – Busches

+0

'createODBCDateTime' trả về một đối tượng datetime. Đối tượng DateTime sẽ * không * được trích dẫn. [Đó là những gì gây ra lỗi cú pháp của bạn] (http://stackoverflow.com/questions/10057107/insert-date-and-time-into-mysql-with-coldfusion/10057405#10057405). Điều đó nói rằng, như những người khác đề nghị bạn thực sự nên sử dụng cfqueryparam trên tất cả các giá trị tham số biến. – Leigh

Trả lời

0

Bạn không cần báo giá xung quanh dấu thời gian ColdFusion được tạo khi chèn vào SQL Server.

Xây dựng, nếu bạn xây dựng timestamp của bạn như là một chuỗi, sử dụng DateFormat và không có điều gì, bạn phải chèn vào sử dụng định dạng này:

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

Các chức năng ColdFusion ODBCx cho những ngày làm tất cả những công việc này cho bạn , vì vậy, chỉ cần:

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

Hãy để ColdFusion ghi dữ liệu cho bạn - sử dụng cfqueryparam. Nó không hoàn toàn cần thiết ở đây, nhưng nó là thực hành tốt để sử dụng nó bất cứ khi nào bạn có thể. Ngoài việc bảo vệ bạn khỏi việc tiêm SQL, nó định dạng các biến của bạn một cách thích hợp, do đó bạn không phải lo lắng về việc có cần chèn các giá trị dưới dạng chuỗi hoặc số nguyên hay bất kỳ thứ gì.

<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

Ý của bạn là 'cf_sql_timestamp'? Bởi vì việc sử dụng 'cf_sql_date' sẽ xóa bất kỳ phần thời gian nào và chỉ chèn ngày tháng. – Leigh

+0

oops, vâng - thói quen trong thực tiễn của riêng chúng ta, nơi chúng ta đặt tên là 'date_xx' hoặc' datetime_xx' một cách thích hợp –

+0

Thật tuyệt, tôi nghĩ đó chỉ là lỗi đánh máy :) Cảm ơn bạn đã cập nhật nó. – Leigh

3

Nếu bạn muốn sử dụng được xây dựng trong VỚI DOANH NGHIỆP chức năng, chỉ bao gồm nó như một phần của truy vấn:

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

Nếu bạn muốn ngày, mà không cần thời gian, sử dụng như sau:

<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 sẽ loại bỏ bất kỳ lúc nào và tùy thuộc vào loại trường của bạn chỉ hiển thị ngày hoặc ngày với giá trị thời gian là 00:00:00.

Nếu bạn muốn có một ngày với thời gian:

<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>