sql >> Databáze >  >> RDS >> Mysql

PHP mysql vložit formát data

Jak je uvedeno v Literály o datu a čase :

MySQL rozpozná DATE hodnoty v těchto formátech:

  • Jako řetězec v 'YYYY-MM-DD' nebo 'RR-MM-DD' formát. Je povolena „uvolněná“ syntaxe:Jako oddělovač mezi částmi data lze použít jakýkoli interpunkční znak. Například '2012-12-31' , '2012/12/31' , '2012^12^31' a '[email protected] @31' jsou ekvivalentní.

  • Jako řetězec bez oddělovačů v 'RRRRMMDD' nebo 'RRMMDD' formátu za předpokladu, že řetězec dává smysl jako datum. Například '20070523' a '070523' jsou interpretovány jako '2007-05-23' , ale '071332' je nezákonné (má nesmyslné části měsíce a dne) a stává se '0000-00-00' .

  • Jako číslo buď v RRRRMMDD nebo RRMMDD formátu za předpokladu, že číslo dává smysl jako datum. Například 19830905 a 830905 jsou interpretovány jako '1983-09-05' .

Tedy řetězec '08/25/2012' není platným datem MySQL. Máte čtyři možnosti (v nějakém nejasném pořadí preferencí, bez dalších informací o vašich požadavcích):

  1. Nakonfigurujte Datepicker tak, aby poskytoval data v podporovaném formátu pomocí altField spolu s jeho altFormat možnost :

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

    Nebo pokud jste rádi, že uživatelé vidí datum v RRRR-MM-DD formát, jednoduše nastavte dateFormat možnost místo toho:

    $( "selector" ).datepicker({
        dateFormat: "yyyy-mm-dd"
    });
    
  2. Použijte MySQL STR_TO_DATE( ) funkce pro převod řetězce:

    INSERT INTO user_date VALUES ('', '$name', STR_TO_DATE('$date', '%m/%d/%Y'))
    
  3. Převeďte řetězec přijatý z jQuery na něco, co PHP chápe jako datum, jako je Datum a čas objekt:

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

    a pak buď:

    • získat vhodný formátovaný řetězec:

      $date = $dt->format('Y-m-d');
      
    • získat časové razítko UNIX:

      $timestamp = $dt->getTimestamp();
      

      který je poté předán přímo do FROM_UNIXTIME() funkce:

      INSERT INTO user_date VALUES ('', '$name', FROM_UNIXTIME($timestamp))
      
  4. Ručně upravte řetězec na platný literál:

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

Upozornění

  1. Váš kód je zranitelný vůči vložení SQL. Vy opravdu by měl používat připravené výpisy , do kterého předáváte své proměnné jako parametry, které se nevyhodnocují pro SQL. Pokud nevíte, o čem mluvím, nebo jak to napravit, přečtěte si příběh Tabulky Bobby .

  2. Také, jak je uvedeno v úvodu do kapitoly PHP manuálu na mysql_* funkce:

    Toto rozšíření je od PHP 5.5.0 zastaralé a nedoporučuje se pro psaní nového kódu, protože bude v budoucnu odstraněno. Místo toho buď mysqli nebo PDO_MySQL je třeba použít rozšíření. Viz také Přehled rozhraní MySQL API pro další pomoc při výběru MySQL API.

  3. Zdá se, že používáte buď DATETIME nebo TIMESTAMP sloupec pro uložení hodnoty data; Doporučuji zvážit použití DATE MySQL zadejte místo toho. Jak je vysvětleno v DATE , DATETIME a TIMESTAMP Typy :

    DATE typ se používá pro hodnoty s částí data, ale bez části času. MySQL načte a zobrazí hodnoty DATE v 'RRRR-MM-DD' formát. Podporovaný rozsah je '1000-01-01' na '9999-12-31' .

    DATETIME typ se používá pro hodnoty, které obsahují části data i času. MySQL načte a zobrazí DATETIME hodnoty v 'RRRR-MM-DD HH:MM:SS' formát. Podporovaný rozsah je '1000-01-01 00:00:00' na '9999-12-31 23:59:59' .

    TIMESTAMP datový typ se používá pro hodnoty, které obsahují část data i času. TIMESTAMP má rozsah '1970-01-01 00:00:01' UTC do '2038-01-19 03:14:07' UTC.



  1. Použití Oracle JDeveloper 12c s Oracle Database 12c na platformě Oracle Cloud, část 1

  2. Jak vytvořit soubor pro zařazování skriptů Oracle SQL

  3. C# Ekvivalent datových typů SQL Server

  4. Analýza názvů tabulek a sloupců z SQL/HQL Java