Както е посочено в Литерали за дата и час :
MySQL разпознава
ДАТАстойности в следните формати:
Като низ в
'ГГГГ-ММ-ДД'или'ГГ-ММ-ДД'формат. Разрешен е „спокоен“ синтаксис:Всеки препинателен знак може да се използва като разделител между частите за дата. Например,'2012-12-31','2012/12/31','2012^12^31'и'example@sqldat.com @31'са еквивалентни.Като низ без разделители в
'ГГГГММДД'или'ГГММДД'формат, при условие че низът има смисъл като дата. Например,'20070523'и'070523'се интерпретират като'2007-05-23', но'071332'е незаконен (има безсмислени части за месец и ден) и става'0000-00-00'.Като число в
ГГГГММДДилиГГММДДформат, при условие че числото има смисъл като дата. Например19830905и830905се интерпретират като'1983-09-05'.
Следователно низът '08/25/2012' не е валиден литерал за дата на MySQL. Имате четири опции (в някакъв неясен ред на предпочитания, без допълнителна информация за вашите изисквания):
-
Конфигурирайте Datepicker да предоставя дати в поддържан формат, като използвате
altFieldзаедно с неговияaltFormatопция :<input type="hidden" id="actualDate" name="actualDate"/>$( "selector" ).datepicker({ altField : "#actualDate" altFormat: "yyyy-mm-dd" });Или, ако се радвате потребителите да видят датата в
ГГГГ-ММ-ДДформат, просто задайтеdateFormatопция вместо това:$( "selector" ).datepicker({ dateFormat: "yyyy-mm-dd" }); -
Използвайте MySQL
STR_TO_DATE( )функция за преобразуване на низа:INSERT INTO user_date VALUES ('', '$name', STR_TO_DATE('$date', '%m/%d/%Y')) -
Преобразувайте низа, получен от jQuery, в нещо, което PHP разбира като дата, като
Дата и часобект:$dt = \DateTime::createFromFormat('m/d/Y', $_POST['date']);и след това или:
-
получите подходящ форматиран низ:
$date = $dt->format('Y-m-d'); -
получите клеймото за време на UNIX:
$timestamp = $dt->getTimestamp();който след това се предава директно на
FROM_UNIXTIME()функция:INSERT INTO user_date VALUES ('', '$name', FROM_UNIXTIME($timestamp))
-
-
Ръчно манипулирайте низа във валиден литерал:
$parts = explode('/', $_POST['date']); $date = "$parts[2]-$parts[0]-$parts[1]";
Предупреждение
-
Кодът ви е уязвим към SQL инжекция. Вие наистина трябва да използва подготвени отчети , в който предавате вашите променливи като параметри, които не се оценяват за SQL. Ако не знаете за какво говоря или как да го поправите, прочетете историята на Таблици Боби .
-
Също така, както е посочено в въведението към главата на ръководството за PHP на
mysql_*функции:Това разширение е остаряло от PHP 5.5.0 и не се препоръчва за писане на нов код, тъй като ще бъде премахнато в бъдеще. Вместо това или mysqli или PDO_MySQL трябва да се използва разширение. Вижте също Преглед на MySQL API за допълнителна помощ при избора на MySQL API.
-
Изглежда, че използвате или
DATETIMEилиTIMESTAMPколона за съхраняване на стойност за дата; Препоръчвам ви да обмислите използването наDATEна MySQL вместо това въведете. Както е обяснено вDATE,DATETIMEиTIMESTAMPВидове :DATEтипът се използва за стойности с част от дата, но без част от време. MySQL извлича и показва стойности за DATE в'ГГГГ-ММ-ДД'формат. Поддържаният диапазон е'1000-01-01'до'9999-12-31'.DATETIMEтипът се използва за стойности, които съдържат части за дата и час. MySQL извлича и показваDATETIMEстойности в'ГГГГ-ММ-ДД ЧЧ:ММ:СС'формат. Поддържаният диапазон е'1000-01-01 00:00:00'до'9999-12-31 23:59:59'.TIMESTAMPтипът данни се използва за стойности, които съдържат части за дата и час.TIMESTAMPима диапазон от'1970-01-01 00:00:01'UTC до'2038-01-19 03:14:07'UTC.