0

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

任何的想法,

4

3 回答 3

4

MySQL 唯一可接受的日期输入格式是YYYY-MM-DD HH:MM:SS. 您在 PHP 中生成的日期看起来像(今天)06/12/12MySQL 将尝试解析的日期,但看到的是12th December, 2006,而不是实际的 2012 年 6 月 12 日。

另外,请注意,您的代码对SQL 注入攻击敞开了大门。阅读并了解如何防止这些,然后再使用此代码进一步。否则你的服务器会得到 pwn3d。

于 2012-06-12T14:26:31.677 回答
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)
于 2012-06-12T14:26:17.917 回答
1

手册

尽管 MySQL 尝试以多种格式解释值,但日期部分必须始终按年-月-日顺序(例如,'98-09-04')给出,而不是按月-日-年或日-月-其他地方常用的年份顺序(例如,'09-04-98'、'04-09-98')。

于 2012-06-12T14:28:27.180 回答