PHP SQL每9个月输入一次null



发生sql错误2018-9-31,将0000-00-00输入数据库,不太确定为什么我只在那个日期得到所有0。非常感谢任何帮助,每三季度插入一次。

INSERT INTO leagues(start,Name,type,end,cashstock) VALUES( '2018-4-1', 'Quarter 2 2018', 'public', '2018-6-30', '7500' )
INSERT INTO leagues(start,Name,type,end,cashstock) VALUES( '2018-7-1', 'Quarter 3 2018', 'public', '2018-9-31', '7500' )

返回

Edit Edit
Copy Copy
Delete Delete
2018-04-01
Quarter 2 2018
3
public
2018-06-30
7500
Edit Edit
Copy Copy
Delete Delete
2018-07-01
Quarter 3 2018
4
public
0000-00-00
7500

九月只有30天。因此2018-9-31是无效日期,因此插入默认的0000-00-00

我建议不要把这件事留给偶然的机会,要么在你的应用程序中检查有效日期,要么让MySQL通过启用严格模式来处理它:

如果启用了严格模式,则不允许使用"0000-00-00",并且插入会产生错误,除非也给出IGNORE。对于INSERT IGNORE和UPDATE IGNORE,允许使用"0000-00-00",并且插入会产生警告。

或者您也可以使用NO_ZERO_DATE:

NO_ZERO_DATE模式影响服务器是否允许"0000-00-00"作为有效日期。其效果还取决于是否启用了严格的SQL模式。

你还没有说你在使用MySQL,但我敢打赌:这是一个MySQL Gotcha。除非你告诉MySQL要严格,并进行大量的设置,否则MySQL将默默地"工作",即使它不应该这样做。你遇到过这样的情况。

在这种情况下,9月只有30天,所以9月31日是一个错误的日期。MySQL没有失败,而是在数据库中输入了无效数据。为了防止这种情况发生,或者更快地发现错误,建议使用InnoDB(而不是MyISAM),并启用严格模式。

如果您从命令行运行此操作,界面将显示Warnings计数,之后您将执行"show Warnings"来查看它们。

此外,从文件来看:

MySQL允许为指定为字符串的值使用"宽松"格式,其中任何标点符号都可以用作日期部分或时间部分之间的分隔符。在某些情况下,这种语法可能具有欺骗性。例如,像"10:11:12"这样的值可能看起来像时间值,因为:,但如果在日期上下文中使用,则会被解释为年份"2010-11-12"。值"10:45:15"转换为"0000-00-00",因为"45"不是有效的月份。

最新更新