我正在构建一个PHP到MySQL的网页,直到现在我才注意到它。我发布到PHP脚本的表单字段的日期被发送到MySQL表进行存储。即使在表单中的日期字段正确显示并且POST日期值被验证为准确,它也不会正确进入我的MySQL表。由于一些奇怪的原因,这一年是2006年而不是2012年。但是,时间是正确的。
这是我的表单日期字段:
<input type=text id="date" name="srdate" value=<?php echo date("m/d/y"); ?>
我的MySQL表中的日期列是TYPE DATE。
我确实检查了表格中存储的日期,但错误的日期不是2012年,而是2006年。
任何想法,
答案 0 :(得分:4)
MySQL唯一可接受的日期输入格式是YYYY-MM-DD HH:MM:SS
。您在PHP中生成的日期看起来像(今天)06/12/12
,MySQL将尝试解析,但看作12th December, 2006
,而不是实际的2012年12月12日。
同样,请注意您的代码对于SQL injection attacks来说是敞开的。阅读并了解如何在使用此代码进行任何操作之前预防这些问题。否则你的服务器将获得pwn3d。
答案 1 :(得分:1)
您需要使用yyyy-mm-dd
语法。
虽然我希望MySQL在尝试插入06/12/12
时抛出错误,但它显然会将其解析为2006-12-12
:
mysql> SELECT cast('06/12/12' as date);
+--------------------------+
| cast('06/12/12' as date) |
+--------------------------+
| 2006-12-12 |
+--------------------------+
1 row in set (0.00 sec)
mysql> SELECT cast('2012-06-12' as date);
+----------------------------+
| cast('2012-06-12' as date) |
+----------------------------+
| 2012-06-12 |
+----------------------------+
1 row in set (0.00 sec)
答案 2 :(得分:1)
来自manual:
虽然MySQL试图解释多种格式的值,但日期部分必须始终以年 - 月 - 日的顺序(例如,'98 -09-04')给出,而不是在月 - 日 - 年或日 - 其他地方常用的月份订单(例如,'09 -04-98','04 -09-98')。