我试图插入一个格式类似2012年8月12日的日期,但当我在插入后检查数据库集时,我只能在日期字段上看到00-00-0000?
这是我使用的查询:
$query= "INSERT INTO ambition_opportunities SET
opp_deadline='".strtotime($_POST['deadline'])."'"; // date field come with date picker**
$sql = mysql_query($query) or die(mysql_error());
感谢
如日期和时间文字:中所述
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'
。
因此,字符串'12-Aug-2012'
不是有效的MySQL日期文字。您有三种选择(按照模糊的偏好顺序,没有任何关于您需求的进一步信息):
-
配置Datepicker以使用其
dateFormat
选项以支持的格式提供日期:$( ".selector" ).datepicker({ dateFormat: "yyyy-mm-dd" });
-
使用MySQL的
STR_TO_DATE()
函数转换字符串:opp_deadline=STR_TO_DATE('$_POST[deadline]', '%d-%b-%Y')
注意:请参阅下面关于SQL注入的警告。
-
将接收到的字符串转换为PHP时间戳—例如,使用当前的
strtotime()
:$timestamp = strtotime($_POST['deadline']);
然后:
使用
date()
:格式化时间戳$date = date('Y-m-d', $timestamp);
使用
FROM_UNIXTIME()
:将时间戳直接传递给MySQLopp_deadline=FROM_UNIXTIME('$timestamp')
警告
-
您的代码容易受到SQL注入的攻击您实际上应该使用准备好的语句,将变量作为参数传递到其中,而这些参数不会针对SQL进行评估。如果你不知道我在说什么,也不知道如何解决这个问题,那就读博比·Tables的故事。
-
此外,正如PHP手册介绍
mysql_*
函数一章中所述:不建议将此扩展用于编写新代码。相反,应该使用mysqli或PDO_MySQL扩展。请参阅MySQL API概述,以获取选择MySQL API时的进一步帮助。
正如您所提到的,数据库中字段的类型是00-00-0000
。您可以插入一个格式为:12-Aug-2012
的值。
您应该将月份的值从"月份名称"转换为"数字",例如:
Jan -> 01,
Feb -> 02 ...
你说得对。
之后,它应该会起作用。
您必须确保输入的日期格式为YYYY-MM-DD
2012年8月12日不是有效的MySQL日期格式,这就是它返回错误的原因。
此外,您的代码易受SQL注入攻击。我强烈建议在将数据插入数据库时使用mysql_real_sescape_string,以防止SQL注入,作为一种快速解决方案,或者更好地使用PDO或MySQLi。
您的插入查询应该是这样的:
SET
opp_provider='".mysql_real_escape_string($_POST['provider'])."'";
我正在尝试在文本框中插入日期2013-12-24。数据库中的日期显示1970-01-01
$date=$year&月份&白天$date=日期("Y-m-d",strtotime($date));
$query = "INSERT INTO `book` VALUES('$id', '$title', '$author_name', '$publisher', '$date' )";