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

PHP mysql indsæt datoformat

Som angivet i dato og klokkeslæt :

MySQL genkender DATE værdier i disse formater:

  • Som en streng i enten 'ÅÅÅÅ-MM-DD' eller 'ÅÅ-MM-DD' format. En "afslappet" syntaks er tilladt:Ethvert tegnsætningstegn kan bruges som skilletegn mellem datodele. For eksempel '2012-12-31' , '2012/12/31' , '2012^12^31' , og '[email protected] @31' er ækvivalente.

  • Som en streng uden skilletegn i hverken 'ÅÅÅÅMMDD' eller 'ÅÅMMDD' format, forudsat at strengen giver mening som en dato. For eksempel '20070523' og '070523' tolkes som '2007-05-23' , men '071332' er ulovlig (den har useriøse måneds- og dagdele) og bliver '0000-00-00' .

  • Som et tal i enten ÅÅÅÅMMDD eller ÅÅMMDD format, forudsat at tallet giver mening som en dato. For eksempel 19830905 og 830905 tolkes som '1983-09-05' .

Derfor er strengen '08/25/2012' er ikke en gyldig MySQL-dato. Du har fire muligheder (i en eller anden vag præferencerækkefølge, uden yderligere oplysninger om dine krav):

  1. Konfigurer Datepicker til at levere datoer i et understøttet format ved hjælp af et altField sammen med dets altFormat mulighed :

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

    Eller hvis du er glad for, at brugerne kan se datoen i ÅÅÅÅ-MM-DD format, skal du blot indstille datoformat mulighed i stedet:

    $( "selector" ).datepicker({
        dateFormat: "yyyy-mm-dd"
    });
    
  2. Brug MySQL's STR_TO_DATE( ) funktion til at konvertere strengen:

    INSERT INTO user_date VALUES ('', '$name', STR_TO_DATE('$date', '%m/%d/%Y'))
    
  3. Konverter strengen modtaget fra jQuery til noget, som PHP forstår som en dato, såsom en kode>DatoTid objekt:

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

    og derefter enten:

    • få en passende formateret streng:

      $date = $dt->format('Y-m-d');
      
    • få UNIX-tidsstemplet:

      $timestamp = $dt->getTimestamp();
      

      som derefter sendes direkte til MySQL's FROM_UNIXTIME() funktion:

      INSERT INTO user_date VALUES ('', '$name', FROM_UNIXTIME($timestamp))
      
  4. Manuelt manipuler strengen til en gyldig bogstavelig:

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

Advarsel

  1. Din kode er sårbar over for SQL-injektion. Du virkelig skal bruge forberedte erklæringer , hvor du sender dine variabler som parametre, der ikke bliver evalueret til SQL. Hvis du ikke ved, hvad jeg taler om, eller hvordan du løser det, så læs historien om Bobby Tables .

  2. Også, som angivet i introduktionen til PHP-manualkapitlet om mysql_* funktioner:

    Denne udvidelse er forældet fra og med PHP 5.5.0 og anbefales ikke til at skrive ny kode, da den vil blive fjernet i fremtiden. I stedet kan enten mysqli eller PDO_MySQL forlængelse skal bruges. Se også MySQL API-oversigt for yderligere hjælp, mens du vælger en MySQL API.

  3. Det ser ud til, at du bruger enten en DATETIME eller TIMESTAMP kolonne til at holde en datoværdi; Jeg anbefaler, at du overvejer at bruge MySQL's DATE skriv i stedet for. Som forklaret i DATE , DATETIME og TIMESTAMP Typer :

    DATE type bruges til værdier med en datodel, men ingen tidsdel. MySQL henter og viser DATO-værdier i 'ÅÅÅÅ-MM-DD' format. Det understøttede område er '1000-01-01' til '9999-12-31' .

    DATETIME type bruges til værdier, der indeholder både dato- og tidsdele. MySQL henter og viser DATETIME værdier i 'ÅÅÅÅ-MM-DD TT:MM:SS' format. Det understøttede område er '1000-01-01 00:00:00' til '9999-12-31 23:59:59' .

    TIMESTAMP datatype bruges til værdier, der indeholder både dato- og tidsdele. TIMESTAMP har et interval på '1970-01-01 00:00:01' UTC til '2038-01-19 03:14:07' UTC.



  1. Sådan laver du en batch-indsættelse i MySQL

  2. MariaDB kommer til en by tæt på dig!

  3. NoSQL:liv uden et skema

  4. MONTHS_BETWEEN() Funktion i Oracle