Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Formato de data de inserção PHP mysql


Conforme declarado em Literais de data e hora :

MySQL reconhece DATE valores nestes formatos:

  • Como uma string em 'AAAA-MM-DD' ou 'AA-MM-DD' formato. Uma sintaxe “relaxada” é permitida:Qualquer caractere de pontuação pode ser usado como delimitador entre as partes da data. Por exemplo, '2012-12-31' , '2012/12/31' , '2012^12^31' e '[email protected] @31' são equivalentes.

  • Como uma string sem delimitadores em 'YYYYMMDD' ou 'AAMMDD' formato, desde que a string faça sentido como uma data. Por exemplo, '20070523' e '070523' são interpretados como '2007-05-23' , mas '071332' é ilegal (tem partes de mês e dia sem sentido) e se torna '0000-00-00' .

  • Como um número em AAAAMMDD ou AAMMDD formato, desde que o número faça sentido como uma data. Por exemplo, 19830905 e 830905 são interpretados como '1983-09-05' .

Portanto, a string '08/25/2012' não é um literal de data MySQL válido. Você tem quatro opções (em alguma ordem vaga de preferência, sem mais informações sobre suas necessidades):

  1. Configure o Datepicker para fornecer datas em um formato compatível usando um altField juntamente com seu altFormat opção :
    <input type="hidden" id="actualDate" name="actualDate"/>
    
    $( "selector" ).datepicker({
        altField : "#actualDate"
        altFormat: "yyyy-mm-dd"
    });
    

    Ou, se você quiser que os usuários vejam a data em AAAA-MM-DD formato, basta definir o dateFormat opção em vez de:
    $( "selector" ).datepicker({
        dateFormat: "yyyy-mm-dd"
    });
    

  2. Use o STR_TO_DATE( do MySQL) ) função para converter a string:
    INSERT INTO user_date VALUES ('', '$name', STR_TO_DATE('$date', '%m/%d/%Y'))
    

  3. Converta a string recebida do jQuery em algo que o PHP entenda como uma data, como um DataHora objeto:
    $dt = \DateTime::createFromFormat('m/d/Y', $_POST['date']);
    

    e então:

    • obter uma string formatada adequada:
      $date = $dt->format('Y-m-d');
      

    • obter o carimbo de data/hora do UNIX:
      $timestamp = $dt->getTimestamp();
      

      que é então passado diretamente para o FROM_UNIXTIME() função:
      INSERT INTO user_date VALUES ('', '$name', FROM_UNIXTIME($timestamp))
      

  4. Manipule manualmente a string em um literal válido:
    $parts = explode('/', $_POST['date']);
    $date  = "$parts[2]-$parts[0]-$parts[1]";
    

Aviso


  1. Seu código é vulnerável à injeção de SQL. Você realmente deve usar declarações preparadas , para o qual você passa suas variáveis ​​como parâmetros que não são avaliados para SQL. Se você não sabe do que estou falando ou como consertar, leia a história de Mesas Bobby .

  2. Além disso, conforme declarado na a introdução para o capítulo do manual do PHP no mysql_* funções:

    Esta extensão está obsoleta a partir do PHP 5.5.0 e não é recomendada para escrever novo código, pois será removida no futuro. Em vez disso, o mysqli ou PDO_MySQL extensão deve ser usada. Veja também a Visão geral da API MySQL para obter mais ajuda ao escolher uma API MySQL.

  3. Você parece estar usando um DATETIME ou TIMESTAMP coluna para guardar um valor de data; Eu recomendo que você considere usar o DATE do MySQL digite em vez disso. Conforme explicado em A DATA , DATETIME e TIMESTAMP Tipos :

    A DATA type é usado para valores com parte de data, mas sem parte de hora. MySQL recupera e exibe valores DATE em 'YYYY-MM-DD' formato. O intervalo suportado é '1000-01-01' para '9999-12-31' .

    O DATETIME type é usado para valores que contêm partes de data e hora. MySQL recupera e exibe DATETIME valores em 'AAAA-MM-DD HH:MM:SS' formato. O intervalo suportado é '1000-01-01 00:00:00' para '9999-12-31 23:59:59' .

    O TIMESTAMP tipo de dados é usado para valores que contêm partes de data e hora. TIMESTAMP tem um intervalo de '1970-01-01 00:00:01' UTC para '2038-01-19 03:14:07' UTC.