我正在使用jQuery datepicker datepicker的格式是这个 08/25/2012
08/25/2012
我在插入数据库时出错,仅插入0000-00-00 00 00 00
我的密码是
<?php $id = $_POST['id']; $name = $_POST['name']; $date = $_POST['date']; $sql = mysql_query( "INSERT INTO user_date VALUE( '', '$name', '$date')" ) or die ( mysql_error() ); echo 'insert successful'; ?>
我确定我的插入内容正确无误。
如日期和时间文字中所述:
MySQL可以识别DATE以下格式的值: 作为'YYYY-MM-DD'或'YY-MM- DD'格式的字符串。允许使用“宽松”语法:任何标点符号都可以用作日期部分之间的分隔符。例如,'2012-12-31','2012/12/31','2012^12^31',和'2012@12@31'是相等的。 * 作为没有格式'YYYYMMDD'或分隔符'YYMMDD'的字符串,前提是该字符串作为日期有意义。例如,'20070523'和'070523'被解释为'2007-05-23',但是'071332'是非法的(它具有无意义的月份和日期部分),成为'0000-00-00'。 * 作为数字YYYYMMDD或YYMMDD格式的数字,前提是该数字作为日期有意义。例如,19830905和830905被解释为'1983-09-05'。
MySQL可以识别DATE以下格式的值:
DATE
'YYYY-MM-DD'
'YY-MM- DD'
'2012-12-31'
'2012/12/31'
'2012^12^31'
'2012@12@31'
* 作为没有格式'YYYYMMDD'或分隔符'YYMMDD'的字符串,前提是该字符串作为日期有意义。例如,'20070523'和'070523'被解释为'2007-05-23',但是'071332'是非法的(它具有无意义的月份和日期部分),成为'0000-00-00'。
'YYYYMMDD'
'YYMMDD'
'20070523'
'070523'
'2007-05-23'
'071332'
'0000-00-00'
* 作为数字YYYYMMDD或YYMMDD格式的数字,前提是该数字作为日期有意义。例如,19830905和830905被解释为'1983-09-05'。
YYYYMMDD
YYMMDD
19830905
830905
'1983-09-05'
因此,该字符串'08/25/2012'不是有效的MySQL日期文字。您有四个选择(按某种模糊的优先顺序,而没有您的要求的任何进一步信息):
'08/25/2012'
altField
altFormat
<input type="hidden" id="actualDate" name="actualDate"/> $( "selector" ).datepicker({ altField : "#actualDate" altFormat: "yyyy-mm-dd"
});
或者,如果您希望用户看到YYYY-MM- DD格式的日期,则只需设置dateFormat选项即可:
YYYY-MM- DD
dateFormat
$( "selector" ).datepicker({ dateFormat: "yyyy-mm-dd" });
使用MySQL的STR_TO_DATE()函数转换字符串:
STR_TO_DATE()
INSERT INTO user_date VALUES ('', '$name', STR_TO_DATE('$date', '%m/%d/%Y'))
将从jQuery接收的字符串转换成PHP可以理解为日期的形式,例如一个DateTime对象:
DateTime
$dt = \DateTime::createFromFormat('m/d/Y', $_POST['date']);
然后:
* 获取合适的格式化字符串: $date = $dt->format('Y-m-d'); * 获取UNIX时间戳: $timestamp = $dt->getTimestamp();
然后将其直接传递给MySQL的FROM_UNIXTIME()函数:
FROM_UNIXTIME()
INSERT INTO user_date VALUES ('', '$name', FROM_UNIXTIME($timestamp))
$parts = explode('/', $_POST['date']);
$date = “$parts[2]-$parts[0]-$parts[1]”;
您的代码容易受到SQL注入的攻击。 您 确实 应该使用准备好的语句,您将变量作为参数传递给该语句,这些参数无法通过SQL进行评估。如果您不知道我在说什么或如何解决它,请阅读Bobby Tables的故事。
此外,作为规定的出台对PHP手册章mysql_*功能:
mysql_*
自PHP 5.5.0起不推荐使用该扩展,不建议编写新代码,因为将来会删除该扩展。相反,应使用mysqli或PDO_MySQL扩展名。另请参见MySQL API概述,以获取选择MySQL API时的更多帮助。
DATETIME
TIMESTAMP
该DATE类型用于具有日期部分但没有时间部分的值。MySQL检索并以'YYYY-MM- DD'格式显示DATE值。支持的范围是'1000-01-01'到'9999-12-31'。 该DATETIME类型用于包含日期和时间部分的值。MySQL检索并DATETIME以'YYYY-MM-DD HH:MM:SS'格式显示值。支持的范围是'1000-01-01 00:00:00'到'9999-12-31 23:59:59'。 该TIMESTAMP数据类型被用于同时包含日期和时间部分的值。UTC TIMESTAMP的范围是UTC。'1970-01-01 00:00:01'``'2038-01-19 03:14:07'
该DATE类型用于具有日期部分但没有时间部分的值。MySQL检索并以'YYYY-MM- DD'格式显示DATE值。支持的范围是'1000-01-01'到'9999-12-31'。
'YYYY-MM- DD'
'1000-01-01'
'9999-12-31'
该DATETIME类型用于包含日期和时间部分的值。MySQL检索并DATETIME以'YYYY-MM-DD HH:MM:SS'格式显示值。支持的范围是'1000-01-01 00:00:00'到'9999-12-31 23:59:59'。
'YYYY-MM-DD HH:MM:SS'
'1000-01-01 00:00:00'
'9999-12-31 23:59:59'
该TIMESTAMP数据类型被用于同时包含日期和时间部分的值。UTC TIMESTAMP的范围是UTC。'1970-01-01 00:00:01'``'2038-01-19 03:14:07'
'1970-01-01 00:00:01'``'2038-01-19 03:14:07'