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'example@sqldat.com @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
RRRRMMDDlubRRMMDDformat, pod warunkiem, że liczba ma sens jako data. Na przykład19830905i830905są 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):
-
Skonfiguruj Datepicker, aby dostarczał daty w obsługiwanym formacie, używając
altFieldwraz z jegoaltFormatopcja :<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-DDpo prostu ustawdateFormatopcja zamiast tego:$( "selector" ).datepicker({ dateFormat: "yyyy-mm-dd" }); -
Użyj
STR_TO_DATE( )funkcja do konwersji ciągu:INSERT INTO user_date VALUES ('', '$name', STR_TO_DATE('$date', '%m/%d/%Y')) -
Przekształć ciąg otrzymany z jQuery na coś, co PHP rozumie jako datę, na przykład
DateTimeobiekt:$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))
-
-
Ręcznie zmień ciąg na prawidłowy literał:
$parts = explode('/', $_POST['date']); $date = "$parts[2]-$parts[0]-$parts[1]";
Ostrzeżenie
-
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 .
-
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.
-
Wygląda na to, że używasz
DATETIMElubTIMESTAMPkolumna do przechowywania wartości daty; Zalecam rozważenie użyciaDATEMySQL zamiast tego wpisz. Jak wyjaśniono wDATE,DATETIMEiTIMESTAMPRodzaje :DATAtyp 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'.DATETIMEtype jest używany dla wartości, które zawierają zarówno części daty, jak i godziny. MySQL pobiera i wyświetlaDATETIMEwartoś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'.TIMESTAMPtyp danych jest używany dla wartości, które zawierają zarówno części daty, jak i godziny.ZNACZNIK CZASOWYma zakres'1970-01-01 00:00:01'UTC do'2038-01-19 03:14:07'UTC.