Som anges i Datum och tidbokstav :
MySQL känner igen
DATEvärden i dessa format:
Som en sträng i antingen
'ÅÅÅÅ-MM-DD'eller'ÅÅ-MM-DD'formatera. En "avslappnad" syntax är tillåten:Alla skiljetecken kan användas som avgränsare mellan datumdelar. Till exempel'2012-12-31','2012/12/31','2012^12^31'och'example@sqldat.com @31'är likvärdiga.Som en sträng utan avgränsare i någon av
'ÅÅÅÅMMDD'eller'ÅÅMMDD'format, förutsatt att strängen är vettig som ett datum. Till exempel'20070523'och'070523'tolkas som'2007-05-23', men'071332'är olagligt (den har orimliga månads- och dagdelar) och blir'0000-00-00'.Som ett nummer i antingen
ÅÅÅÅMMDDellerÅÅMMDDformat, förutsatt att numret är vettigt som ett datum. Till exempel19830905och830905tolkas som'1983-09-05'.
Därför är strängen '08/25/2012' är inte en giltig MySQL-datumbokstav. Du har fyra alternativ (i någon vag prioritetsordning, utan ytterligare information om dina krav):
-
Konfigurera Datepicker för att tillhandahålla datum i ett format som stöds med ett
altFieldtillsammans med dessaltFormatalternativ :<input type="hidden" id="actualDate" name="actualDate"/>$( "selector" ).datepicker({ altField : "#actualDate" altFormat: "yyyy-mm-dd" });Eller om du vill att användarna ska se datumet i
ÅÅÅÅ-MM-DDformat, ställ bara indateFormatalternativ istället:$( "selector" ).datepicker({ dateFormat: "yyyy-mm-dd" }); -
Använd MySQL:s
STR_TO_DATE( )funktion för att konvertera strängen:INSERT INTO user_date VALUES ('', '$name', STR_TO_DATE('$date', '%m/%d/%Y')) -
Konvertera strängen som tas emot från jQuery till något som PHP förstår som ett datum, till exempel en code>DatumTime objekt:
$dt = \DateTime::createFromFormat('m/d/Y', $_POST['date']);och sedan antingen:
-
skaffa en lämplig formaterad sträng:
$date = $dt->format('Y-m-d'); -
få UNIX-tidsstämpeln:
$timestamp = $dt->getTimestamp();som sedan skickas direkt till MySQL:s
FROM_UNIXTIME()funktion:INSERT INTO user_date VALUES ('', '$name', FROM_UNIXTIME($timestamp))
-
-
Manipulera strängen manuellt till en giltig bokstavlig:
$parts = explode('/', $_POST['date']); $date = "$parts[2]-$parts[0]-$parts[1]";
Varning
-
Din kod är sårbar för SQL-injektion. Du verkligen bör använda förberedda uttalanden , där du skickar dina variabler som parametrar som inte utvärderas för SQL. Om du inte vet vad jag pratar om, eller hur du fixar det, läs historien om Bobby Tables .
-
Dessutom, som anges i introduktionen till PHP-manualkapitlet om
mysql_*funktioner:Detta tillägg är utfasat från och med PHP 5.5.0 och rekommenderas inte för att skriva ny kod eftersom det kommer att tas bort i framtiden. Istället, antingen mysqli eller PDO_MySQL förlängning ska användas. Se även MySQL API-översikt för ytterligare hjälp när du väljer ett MySQL API.
-
Du verkar använda antingen en
DATETIMEellerTIMESTAMPkolumn för att hålla ett datumvärde; Jag rekommenderar att du överväger att använda MySQL:sDATEtyp istället. Som förklarat iDATE,DATETIMEochTIMESTAMPTyper :DATEtyp används för värden med en datumdel men ingen tidsdel. MySQL hämtar och visar DATUM-värden i'ÅÅÅÅ-MM-DD'formatera. Området som stöds är'1000-01-01'till'9999-12-31'.DATETIMEtyp används för värden som innehåller både datum- och tidsdelar. MySQL hämtar och visarDATETIMEvärden i'ÅÅÅÅ-MM-DD TT:MM:SS'formatera. Området som stöds är'1000-01-01 00:00:00'till'9999-12-31 23:59:59'.TIMESTAMPdatatyp används för värden som innehåller både datum- och tidsdelar.TIMESTAMPhar ett intervall på'1970-01-01 00:00:01'UTC till'2038-01-19 03:14:07'UTC.