sql >> Database >  >> RDS >> Mysql

PHP mysql datumnotatie invoegen

Zoals vermeld in Datum- en tijdliteratuur :

MySQL herkent DATE waarden in deze formaten:

  • Als een string in een van beide 'YYYY-MM-DD' of 'YY-MM-DD' formaat. Een "relaxte" syntaxis is toegestaan:elk leesteken kan worden gebruikt als scheidingsteken tussen datumdelen. Bijvoorbeeld '2012-12-31' , '2012/12/31' , '2012^12^31' , en '[email protected]@31' gelijkwaardig zijn.

  • Als een tekenreeks zonder scheidingstekens in 'YYYYMMDD' of 'YYMMDD' formaat, op voorwaarde dat de string zinvol is als een datum. Bijvoorbeeld '20070523' en '070523' worden geïnterpreteerd als '2007-05-23' , maar '071332' is illegaal (het heeft onzinnige maand- en dagdelen) en wordt '0000-00-00' .

  • Als een getal in YYYYMMDD of YYMMDD formaat, op voorwaarde dat het nummer zinvol is als een datum. Bijvoorbeeld 19830905 en 830905 worden geïnterpreteerd als '1983-09-05' .

Daarom is de string '08/25/2012' is geen geldige MySQL-datum letterlijk. Je hebt vier opties (in een vage volgorde van voorkeur, zonder verdere informatie over je wensen):

  1. Configureer Datepicker om datums in een ondersteund formaat weer te geven met behulp van een altField samen met zijn altFormat optie :

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

    Of, als u het prettig vindt dat gebruikers de datum zien in YYYY-MM-DD formaat, stel gewoon de dateFormat in optie in plaats daarvan:

    $( "selector" ).datepicker({
        dateFormat: "yyyy-mm-dd"
    });
    
  2. Gebruik MySQL's STR_TO_DATE() functie om de string te converteren:

    INSERT INTO user_date VALUES ('', '$name', STR_TO_DATE('$date', '%m/%d/%Y'))
    
  3. Converteer de tekenreeks die is ontvangen van jQuery naar iets dat PHP begrijpt als een datum, zoals een DateTime voorwerp:

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

    en dan ofwel:

    • verkrijg een geschikte opgemaakte string:

      $date = $dt->format('Y-m-d');
      
    • verkrijg de UNIX-tijdstempel:

      $timestamp = $dt->getTimestamp();
      

      die vervolgens rechtstreeks wordt doorgegeven aan MySQL's FROM_UNIXTIME() functie:

      INSERT INTO user_date VALUES ('', '$name', FROM_UNIXTIME($timestamp))
      
  4. Manipuleer de string handmatig in een geldige letterlijke:

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

Waarschuwing

  1. Uw code is kwetsbaar voor SQL-injectie. Jij echt zou voorbereide verklaringen moeten gebruiken , waarin u uw variabelen doorgeeft als parameters die niet worden geëvalueerd voor SQL. Als je niet weet waar ik het over heb, of hoe je het kunt oplossen, lees dan het verhaal van Bobbytafels .

  2. Ook, zoals vermeld in de inleiding naar het hoofdstuk over de PHP-handleiding op de mysql_* functies:

    Deze extensie is verouderd vanaf PHP 5.5.0 en wordt niet aanbevolen voor het schrijven van nieuwe code, aangezien deze in de toekomst zal worden verwijderd. In plaats daarvan, ofwel de mysqli of PDO_MySQL extensie moet worden gebruikt. Zie ook het MySQL API-overzicht voor meer hulp bij het kiezen van een MySQL API.

  3. U lijkt een DATETIME . te gebruiken of TIMESTAMP kolom voor het bevatten van een datumwaarde; Ik raad je aan om MySQL's DATE . te gebruiken typ in plaats daarvan. Zoals uitgelegd in De DATE , DATETIME , en TIMESTAMP Soorten :

    De DATE type wordt gebruikt voor waarden met een datumgedeelte maar geen tijdgedeelte. MySQL haalt DATE-waarden op en geeft ze weer in 'YYYY-MM-DD' formaat. Het ondersteunde bereik is '1000-01-01' naar '9999-12-31' .

    De DATETIME type wordt gebruikt voor waarden die zowel datum- als tijddelen bevatten. MySQL haalt DATETIME op en geeft het weer waarden in 'YYYY-MM-DD HH:MM:SS' formaat. Het ondersteunde bereik is '1000-01-01 00:00:00' naar '9999-12-31 23:59:59' .

    De TIMESTAMP gegevenstype wordt gebruikt voor waarden die zowel datum- als tijddelen bevatten. TIMESTAMP heeft een bereik van '1970-01-01 00:00:01' UTC naar '2038-01-19 03:14:07' GMT.



  1. python-object opslaan in postgres-tabel met augurk

  2. Wijzig datumformaat (in DB of uitvoer) in dd/mm/jjjj - PHP MySQL

  3. Hoe een gebruiker te klonen in Oracle

  4. Bereik hiërarchie, ouder-kindrelatie op een effectieve en gemakkelijke manier