Както е посочено в Литерали за дата и час :
MySQL разпознава
ДАТА
стойности в следните формати:
Като низ в
'ГГГГ-ММ-ДД'
или'ГГ-ММ-ДД'
формат. Разрешен е „спокоен“ синтаксис:Всеки препинателен знак може да се използва като разделител между частите за дата. Например,'2012-12-31'
,'2012/12/31'
,'2012^12^31'
и'[email protected] @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.