Jak je uvedeno v Literály o datu a čase :
MySQL rozpozná
DATEhodnoty 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'example@sqldat.com @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
RRRRMMDDneboRRMMDDformátu za předpokladu, že číslo dává smysl jako datum. Například19830905a830905jsou 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):
-
Nakonfigurujte Datepicker tak, aby poskytoval data v podporovaném formátu pomocí
altFieldspolu s jehoaltFormatmož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-DDformát, jednoduše nastavtedateFormatmožnost místo toho:$( "selector" ).datepicker({ dateFormat: "yyyy-mm-dd" }); -
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')) -
Převeďte řetězec přijatý z jQuery na něco, co PHP chápe jako datum, jako je
Datum a časobjekt:$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))
-
-
Ručně upravte řetězec na platný literál:
$parts = explode('/', $_POST['date']); $date = "$parts[2]-$parts[0]-$parts[1]";
Upozornění
-
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 .
-
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.
-
Zdá se, že používáte buď
DATETIMEneboTIMESTAMPsloupec pro uložení hodnoty data; Doporučuji zvážit použitíDATEMySQL zadejte místo toho. Jak je vysvětleno vDATE,DATETIMEaTIMESTAMPTypy :DATEtyp 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'.DATETIMEtyp se používá pro hodnoty, které obsahují části data i času. MySQL načte a zobrazíDATETIMEhodnoty 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'.TIMESTAMPdatový typ se používá pro hodnoty, které obsahují část data i času.TIMESTAMPmá rozsah'1970-01-01 00:00:01'UTC do'2038-01-19 03:14:07'UTC.