Mysql
 sql >> Baza danych >  >> RDS >> Mysql

PHP mysql wstaw format daty

Jak stwierdzono w Literały daty i czasu :

MySQL rozpoznaje DATE wartości w tych formatach:

  • Jako ciąg w 'RRRR-MM-DD' lub 'RR-MM-DD' format. Dozwolona jest „zrelaksowana” składnia:Dowolny znak interpunkcyjny może być użyty jako ogranicznik między częściami daty. Na przykład '2012-12-31' , '31.12.2012' , '2012^12^31' oraz '[email protected] @31' są równoważne.

  • Jako ciąg bez ograniczników w 'RRRRMMDD' lub 'RRMMDD' format, pod warunkiem, że ciąg ma sens jako data. Na przykład '20070523' i '070523' są interpretowane jako '2007-05-23' , ale '071332' jest nielegalne (ma bezsensowne części miesiąca i dnia) i staje się '0000-00-00' .

  • Jako liczba w RRRRMMDD lub RRMMDD format, pod warunkiem, że liczba ma sens jako data. Na przykład 19830905 i 830905 są interpretowane jako '1983-09-05' .

Dlatego ciąg '08/25/2012' nie jest prawidłowym literałem daty MySQL. Masz cztery opcje (w niejasnej kolejności preferencji, bez żadnych dalszych informacji o twoich wymaganiach):

  1. Skonfiguruj Datepicker, aby dostarczał daty w obsługiwanym formacie, używając altField wraz z jego altFormat opcja :

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

    Lub, jeśli chcesz, aby użytkownicy widzieli datę w RRRR-MM-DD po prostu ustaw dateFormat opcja zamiast tego:

    $( "selector" ).datepicker({
        dateFormat: "yyyy-mm-dd"
    });
    
  2. Użyj STR_TO_DATE( ) funkcja do konwersji ciągu:

    INSERT INTO user_date VALUES ('', '$name', STR_TO_DATE('$date', '%m/%d/%Y'))
    
  3. Przekształć ciąg otrzymany z jQuery na coś, co PHP rozumie jako datę, na przykład DateTime obiekt:

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

    a potem albo:

    • uzyskaj odpowiednio sformatowany ciąg:

      $date = $dt->format('Y-m-d');
      
    • uzyskaj znacznik czasu UNIX:

      $timestamp = $dt->getTimestamp();
      

      który jest następnie przekazywany bezpośrednio do FROM_UNIXTIME() funkcja:

      INSERT INTO user_date VALUES ('', '$name', FROM_UNIXTIME($timestamp))
      
  4. Ręcznie zmień ciąg na prawidłowy literał:

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

Ostrzeżenie

  1. Twój kod jest podatny na wstrzyknięcie SQL. Ty naprawdę powinien używać przygotowanych wyciągów , do którego przekazujesz zmienne jako parametry, które nie są oceniane pod kątem SQL. Jeśli nie wiesz, o czym mówię lub jak to naprawić, przeczytaj historię Tabele Bobby .

  2. Ponadto, jak stwierdzono w wstępie do rozdziału podręcznika PHP na temat mysql_* funkcje:

    To rozszerzenie jest przestarzałe od PHP 5.5.0 i nie jest zalecane do pisania nowego kodu, ponieważ zostanie usunięte w przyszłości. Zamiast tego albo mysqli lub PDO_MySQL należy użyć rozszerzenia. Zobacz także Omówienie interfejsu API MySQL aby uzyskać dalszą pomoc przy wyborze interfejsu API MySQL.

  3. Wygląda na to, że używasz DATETIME lub TIMESTAMP kolumna do przechowywania wartości daty; Zalecam rozważenie użycia DATE MySQL zamiast tego wpisz. Jak wyjaśniono w DATE , DATETIME i TIMESTAMP Rodzaje :

    DATA typ jest używany dla wartości z częścią daty, ale bez części czasu. MySQL pobiera i wyświetla wartości DATE w 'RRRR-MM-DD' format. Obsługiwany zakres to '1000-01-01' do '9999-12-31' .

    DATETIME type jest używany dla wartości, które zawierają zarówno części daty, jak i godziny. MySQL pobiera i wyświetla DATETIME wartości w 'RRRR-MM-DD GG:MM:SS' format. Obsługiwany zakres to '1000-01-01 00:00:00' do '9999-12-31 23:59:59' .

    TIMESTAMP typ danych jest używany dla wartości, które zawierają zarówno części daty, jak i godziny. ZNACZNIK CZASOWY ma zakres '1970-01-01 00:00:01' UTC do '2038-01-19 03:14:07' UTC.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Porównaj daty w MySQL

  2. Pymysql Cursor.fetchall() / Fetchone() Zwraca Brak

  3. Jak utworzyć użytkownika w MySQL

  4. Uwzględnić nagłówki podczas korzystania z funkcji SELECT INTO OUTFILE?

  5. Jak mogę poprawić błąd ładowania MySQL?