3

Вопрос по mysql – Вставьте дату и время в MySQL с ColdFusion

Я полностью потерян здесь.

Существует поле типа «дата / время». в базе данных MySQL. Я хочу заполнить его датой-временем, сгенерированным программой ColdFusion. Я обнаружил, что CreateODBCDateTime должен использоваться для преобразования в формат собственности, чтобы MySQL мог его принять, так что ...

<cfset myDateTime = CreateODBCDateTime("07-04-2012 20:11:00")>

И где-то позже:

<cfquery name="qAddDate">
    INSERT INTO some_table
    (`date`)
    VALUES
    ('#myDateTime#')
</cfquery>

Тем не менее, я получаю эту ошибку при попытке отправить данные в базу данных:

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '2012-07-04 20:11:00'}')' at line 8

Строка 8 - это строка с датой:

INSERT INTO some_table
(`date`)
VALUES
('{ts '2012-07-04 20:11:00'}')

Может ли кто-нибудь помочь?

Благодарю.

  • @Leigh, спасибо за разъяснение. Я не заметил "MySQL" часть вопроса. Я никогда не использовал MySQL.

    от
  • Да, большинство людей на SO довольно приличные. В общем, я просто не люблю голосовать без комментариев. Если что-то не так, чтобы оправдать отрицательное голосование, оно также заслуживает комментария, объясняющего почему. В противном случае это побеждает цель создания сайта для совместной работы, то есть помогает улучшить и продвигать лучшие ответы. Это вряд ли произойдет, если получатель никогда не знает, что не так. {слезает с мыльницы};)

    от
  • На самом деле он, вероятно, нуждается в них для MySQL, потому чтоDate обычно зарезервированное слово. (Обратные галочки являются допустимым escape-символом в mySQL) Синтаксическая ошибка, вероятно, вызвана одинарными кавычками вокруг значения объекта date.

    от
  • @ user2297366 - Вы имели в виду CreateODBCDateTime? Потому что с помощью CreateODBCDateremoves часть времени вместо передачи ее в БД, независимо от того, используете ли вы cf_sql_timestamp или нет. Примечание: если вам нужны текущие дата и время, пропустите createODBCDate / Time () и просто используйтеnow(), В большинстве случаев оба являются эквивалентными.

    от
  • Если вы используете#createODBCDate(NOW())#, будет проходить только часть даты, так как предложено, использовать<cfqueryparam value=#createODBCDate(NOW())# cfsqltype="cf_sql_timestamp" list="no" пройти часть времени, а также.

    от
  • Я использую это только изредка. Я помню, что я так привык к квадратным скобкам MS SQL, когда я впервые увидел обратные тики, я подумал: "Для чего они, черт возьми"? " Это застряло в моей голове;)

    от
  • Просто наткнулся на это снова. Я хотел бы, чтобы люди оставляли комментарии, когда голосовали против, и не оставляли бы кого-то другого, так сказать, держащего сумку;)

    от
  • Полностью решена проблема. Спасибо за быструю помощь :)

    от Eleeist
  • Добро пожаловать :)

    от
  • 0

    Они выглядят как «обратные тики»

    что может вызвать проблемы. Конечно, я не использовал MySQL, поэтому не могу сказать наверняка.

    (`date`)
    

    Вы должны быть в состоянии сделать это:

    INSERT INTO some_table(date)
    VALUES ('{ts '2012-07-04 20:11:00'}')
    

  • 0

    Следующий фрагмент кода и выходной дисплей (внизу поста)

    show MySQL date field insertion and update using ColdFusion 10.
    <CFOUTPUT>
    
      <CFSET mLST_UPDT = CreateODBCDate("07/04/2012")>
    
      Date for SQL Insert = #mLST_UPDT# <br>
    
    <!---- INSERT code without use of cfqueryparam ---->
    <CFQUERY NAME="TAB_INSERT" DATASOURCE="HELMSFARMS">
    INSERT INTO DATE_TABLE (LST_UPDT) VALUES (#mLST_UPDT#)
    </CFQUERY>
    
    <!---- INSERT code using cfqueryparam ---->
    <CFQUERY NAME="TAB_INSERT" DATASOURCE="HELMSFARMS">
    INSERT INTO DATE_TABLE
    (LST_UPDT)
    VALUES (<cfqueryparam value="#mLST_UPDT#" cfsqltype="cf_sql_date"> ) 
    </CFQUERY>
    
    <!---- Getting and Displaying results of INSERT ---->
    <CFQUERY NAME="GET_DATES1" DATASOURCE="HELMSFARMS">
    SELECT LST_UPDT FROM DATE_TABLE  
    </CFQUERY>
    
    <CFLOOP QUERY="GET_DATES1">
    #CURRENTROW#. #GET_DATES1.LST_UPDT# #dateformat(GET_DATES1.LST_UPDT,"mm/dd/yyyy")#
    <br>
    </CFLOOP>
    
    <!---- Code that uses UPDATE on the records INSERTED above ---->
    <cfset mNXT_UPDT = CreateODBCDate("08/05/2014")>
    <br>
    Date for SQL Update = #mNXT_UPDT# <br>
    
    <!---- UPDATE code using cfqueryparam ---->
    <CFQUERY NAME="GET_DATES2" DATASOURCE="HELMSFARMS">
    UPDATE DATE_TABLE SET
    LST_UPDT = <cfqueryparam value="#mNXT_UPDT#" CFSQLType="cf_sql_date" > 
    </CFQUERY>
    
    <CFQUERY NAME="GET_DATES2" DATASOURCE="HELMSFARMS">
    SELECT LST_UPDT FROM DATE_TABLE  
    </CFQUERY>
    
    <CFLOOP QUERY="GET_DATES2">
    #CURRENTROW#. #GET_DATES2.LST_UPDT# #dateformat(GET_DATES2.LST_UPDT,"mm/dd/yyyy")#<br>
    </CFLOOP>
    
    </CFOUTPUT>  
    
    <!----- Results of running above code 
    Used a MySQL table named DATE_TABLE with 
    one Date Field named LST_UPDT
    --------------------------------------
    Date for SQL Insert = {d '2012-07-04'} 
    1. {ts '2014-08-05 00:00:00'} 08/05/2014
    2. {ts '2014-08-05 00:00:00'} 08/05/2014
    3. {ts '2014-08-05 00:00:00'} 08/05/2014
    4. {ts '2014-08-05 00:00:00'} 08/05/2014
    5. {ts '2012-07-04 00:00:00'} 07/04/2012
    6. {ts '2012-07-04 00:00:00'} 07/04/2012
    Date for SQL Update = {d '2014-08-05'} 
    1. {ts '2014-08-05 00:00:00'} 08/05/2014
    2. {ts '2014-08-05 00:00:00'} 08/05/2014
    3. {ts '2014-08-05 00:00:00'} 08/05/2014
    4. {ts '2014-08-05 00:00:00'} 08/05/2014
    5. {ts '2014-08-05 00:00:00'} 08/05/2014
    6. {ts '2014-08-05 00:00:00'} 08/05/2014
    ---->
    

  • 10

    Вам не нужны цитаты вокруг датыobjectsтолько строки. Удаление кавычек

    должно устранить вашу синтаксическую ошибку:

      INSERT INTO some_table (`date`)
      VALUES ( #myDateTime# )
    

    Хотя вы должны привыкнуть использоватьcfqueryparam

      INSERT INTO some_table (`date`)
      VALUES ( <cfqueryparam value="#myDateTime#" cfsqltype="cf_sql_timestamp"> )
    

    ... ИЛИ если это допустимая / разбираемая строка даты в США, вы можете пропустить createODBCDate и просто использовать:

      INSERT INTO some_table (`date`)
      VALUES ( <cfqueryparam value="07-04-2012 20:11:00" cfsqltype="cf_sql_timestamp"> )