sql >> Base de Datos >  >> RDS >> Mysql

Formato de fecha de inserción PHP mysql

Como se indica en Literales de fecha y hora :

MySQL reconoce DATE valores en estos formatos:

  • Como una cadena en 'YYYY-MM-DD' o 'AA-MM-DD' formato. Se permite una sintaxis "relajada":se puede usar cualquier carácter de puntuación como delimitador entre las partes de la fecha. Por ejemplo, '2012-12-31' , '2012/12/31' , '2012^12^31' y '[email protected] @31' son equivalentes.

  • Como una cadena sin delimitadores en 'YYYYMMDD' o 'AAMMDD' formato, siempre que la cadena tenga sentido como una fecha. Por ejemplo, '20070523' y '070523' se interpretan como '2007-05-23' , pero '071332' es ilegal (tiene partes de mes y día sin sentido) y se convierte en '0000-00-00' .

  • Como un número en YYYYMMDD o AAMMDD formato, siempre que el número tenga sentido como fecha. Por ejemplo, 19830905 y 830905 se interpretan como '1983-09-05' .

Por lo tanto, la cadena '08/25/2012' no es un literal de fecha MySQL válido. Tiene cuatro opciones (en un vago orden de preferencia, sin más información sobre sus requisitos):

  1. Configure Datepicker para proporcionar fechas en un formato compatible usando un altField junto con su altFormat opción :

    <input type="hidden" id="actualDate" name="actualDate"/>
    
    $( "selector" ).datepicker({
        altField : "#actualDate"
        altFormat: "yyyy-mm-dd"
    });
    

    O bien, si está de acuerdo con que los usuarios vean la fecha en YYYY-MM-DD formato, simplemente configure el dateFormat opción en cambio:

    $( "selector" ).datepicker({
        dateFormat: "yyyy-mm-dd"
    });
    
  2. Use MySQL STR_TO_DATE( ) función para convertir la cadena:

    INSERT INTO user_date VALUES ('', '$name', STR_TO_DATE('$date', '%m/%d/%Y'))
    
  3. Convierta la cadena recibida de jQuery en algo que PHP entienda como una fecha, como FechaHora objeto:

    $dt = \DateTime::createFromFormat('m/d/Y', $_POST['date']);
    

    y luego:

    • obtener una cadena con formato adecuado:

      $date = $dt->format('Y-m-d');
      
    • obtener la marca de tiempo UNIX:

      $timestamp = $dt->getTimestamp();
      

      que luego se pasa directamente al FROM_UNIXTIME() función:

      INSERT INTO user_date VALUES ('', '$name', FROM_UNIXTIME($timestamp))
      
  4. Manipule manualmente la cadena en un literal válido:

    $parts = explode('/', $_POST['date']);
    $date  = "$parts[2]-$parts[0]-$parts[1]";
    

Advertencia

  1. Tu código es vulnerable a la inyección SQL.de verdad debería usar declaraciones preparadas , en el que pasa sus variables como parámetros que no se evalúan para SQL. Si no sabe de qué estoy hablando o cómo solucionarlo, lea la historia de Bobby Tables .

  2. Además, como se indica en la introducción al capítulo del manual de PHP sobre mysql_* funciones:

    Esta extensión está obsoleta a partir de PHP 5.5.0 y no se recomienda para escribir código nuevo, ya que se eliminará en el futuro. En su lugar, el mysqli o PDO_MySQL se debe usar la extensión. Consulte también la Descripción general de la API de MySQL para obtener más ayuda al elegir una API de MySQL.

  3. Parece que estás usando un DATETIME o TIMESTAMP columna para contener un valor de fecha; Te recomiendo que consideres usar DATE de MySQL escriba en su lugar. Como se explica en The DATE , FECHAHORA y TIMESTAMP Tipos :

    La FECHA El tipo se utiliza para valores con una parte de fecha pero sin parte de hora. MySQL recupera y muestra los valores de FECHA en 'YYYY-MM-DD' formato. El rango admitido es '1000-01-01' a '9999-12-31' .

    El DATETIME El tipo se utiliza para valores que contienen partes de fecha y hora. MySQL recupera y muestra DATETIME valores en 'YYYY-MM-DD HH:MM:SS' formato. El rango admitido es '1000-01-01 00:00:00' a '9999-12-31 23:59:59' .

    El TIMESTAMP El tipo de datos se utiliza para valores que contienen partes de fecha y hora. TIMESTAMP tiene un rango de '1970-01-01 00:00:01' UTC a '2038-01-19 03:14:07' UTC.