Mysql
 sql >> Database >  >> RDS >> Mysql

PHP mysql inserisce il formato della data

Come indicato in Valori letterali di data e ora :

MySQL riconosce DATE valori in questi formati:

  • Come stringa in 'YYYY-MM-DD' o 'AA-MM-GG' formato. È consentita una sintassi "rilassata":qualsiasi carattere di punteggiatura può essere utilizzato come delimitatore tra le parti della data. Ad esempio, '2012-12-31' , '31/12/2012' , '2012^12^31' e '[email protected] @31' sono equivalenti.

  • Come stringa senza delimitatori in 'YYYYMMDD' o 'AAMMGG' format, a condizione che la stringa abbia senso come data. Ad esempio, '20070523' e '070523' vengono interpretati come '2007-05-23' , ma '071332' è illegale (ha parti di mese e giorno senza senso) e diventa '0000-00-00' .

  • Come numero in YYYYMMDD o AAMMGG formato, a condizione che il numero abbia senso come data. Ad esempio, 19830905 e 830905 vengono interpretati come '1983-09-05' .

Pertanto, la stringa '08/25/2012' non è una data letterale MySQL valida. Hai quattro opzioni (in un vago ordine di preferenza, senza ulteriori informazioni sulle tue esigenze):

  1. Configura Datepicker per fornire le date in un formato supportato utilizzando un altField insieme al suo altFormat opzione :

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

    Oppure, se sei felice che gli utenti vedano la data in AAAA-MM-GG format, imposta semplicemente il dateFormat opzione invece:

    $( "selector" ).datepicker({
        dateFormat: "yyyy-mm-dd"
    });
    
  2. Usa STR_TO_DATE( ) funzione per convertire la stringa:

    INSERT INTO user_date VALUES ('', '$name', STR_TO_DATE('$date', '%m/%d/%Y'))
    
  3. Converti la stringa ricevuta da jQuery in qualcosa che PHP interpreta come una data, ad esempio un DataOra oggetto:

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

    e poi:

    • ottenere una stringa formattata adatta:

      $date = $dt->format('Y-m-d');
      
    • ottenere il timestamp UNIX:

      $timestamp = $dt->getTimestamp();
      

      che viene quindi passato direttamente a DA_UNIXTIME() funzione:

      INSERT INTO user_date VALUES ('', '$name', FROM_UNIXTIME($timestamp))
      
  4. Manipola manualmente la stringa in un valore letterale valido:

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

Avviso

  1. Il tuo codice è vulnerabile a SQL injection. Tu davvero dovrebbe utilizzare dichiarazioni preparate , in cui si passano le variabili come parametri che non vengono valutati per SQL. Se non sai di cosa sto parlando o come risolverlo, leggi la storia di Tabelle Bobby .

  2. Inoltre, come affermato in l'introduzione al capitolo del manuale PHP su mysql_* funzioni:

    Questa estensione è deprecata a partire da PHP 5.5.0 e non è consigliata per la scrittura di nuovo codice poiché verrà rimossa in futuro. Invece, il mysqli o PDO_MySQL dovrebbe essere utilizzata l'estensione. Vedi anche la Panoramica API MySQL per ulteriore assistenza nella scelta di un'API MySQL.

  3. Sembra che tu stia utilizzando un DATETIME o TIMESTAMP colonna per contenere un valore di data; Ti consiglio di considerare l'utilizzo di DATE di MySQL digita invece. Come spiegato in Il DATE , DATETIME e TIMESTAMP Tipi :

    Il DATA type viene utilizzato per i valori con una parte data ma senza parte temporale. MySQL recupera e visualizza i valori DATE in 'YYYY-MM-DD' formato. L'intervallo supportato è '1000-01-01' a '9999-12-31' .

    Il DATETIME type viene utilizzato per i valori che contengono parti di data e ora. MySQL recupera e visualizza DATETIME valori in 'AAAA-MM-GG HH:MM:SS' formato. L'intervallo supportato è '1000-01-01 00:00:00' a '9999-12-31 23:59:59' .

    Il TIMESTAMP il tipo di dati viene utilizzato per i valori che contengono parti di data e ora. TIMESTAMP ha un intervallo di '1970-01-01 00:00:01' UTC a '2038-01-19 03:14:07' UTC.