为什么存储在MySQL中的日期都错了?

时间:2012-06-12 14:24:10

标签: php mysql html database html-form-post

我正在构建一个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年。

任何想法,

3 个答案:

答案 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')。

相关问题