将PHP中的日期插入数据库时的奇怪行为

将PHP中的日期插入数据库时的奇怪行为,php,mysql,date,Php,Mysql,Date,在“form.php”中 ->也不行 编辑: 我已经从“m-d-Y”改为“Y-m-d”以获得适当的语义,但它仍然不起作用 但是,如果我这样更改代码: $query = "INSERT INTO sts (time) VALUES ('1991-10-05') "; 它起作用了 有人能给我解释一下吗?你想要的是日期(“Y-m-d”而不是日期(“m-d-Y” 如果使用这种格式,还需要在日期前后加引号,因为如果没有引号,MySQL会认为你在插入一个名称:1991-10-05=1976 $query

在“form.php”中

->也不行

编辑: 我已经从“m-d-Y”改为“Y-m-d”以获得适当的语义,但它仍然不起作用

但是,如果我这样更改代码:

$query = "INSERT INTO sts (time) VALUES ('1991-10-05') ";
它起作用了

有人能给我解释一下吗?

你想要的是
日期(“Y-m-d”
而不是
日期(“m-d-Y”

如果使用这种格式,还需要在日期前后加引号,因为如果没有引号,MySQL会认为你在插入一个名称:
1991-10-05=1976

$query = "INSERT INTO sts (time) VALUES ('" .  date("Y-m-d", mktime(0, 0, 0, $time[1], $time[2], $time[0])). "'  ) ";
或者更简短的格式,不带引号

$query = "INSERT INTO sts (time) VALUES (" .  date("Ymd", mktime(0, 0, 0, $time[1], $time[2], $time[0])). "  ) ";
就我个人而言,我会:

$ts = strtotime($_POST['dat']);
if($ts != 0) {
  $date = date('Ymd',$ts);    
  $query = "INSERT INTO sts (time) VALUES ($date) ";
} else {
// invalid date format
}
就像其他人在评论中所说的那样:永远不要直接在你的查询中放置
$\u POST
(或
$\u GET
或任何不受信任的数据)。总是先转义/清理数据。

你想要
日期(“Y-m-d”
而不是
日期(“m-d-Y”

如果使用这种格式,还需要在日期前后加引号,因为如果没有引号,MySQL会认为你在插入一个名称:
1991-10-05=1976

$query = "INSERT INTO sts (time) VALUES ('" .  date("Y-m-d", mktime(0, 0, 0, $time[1], $time[2], $time[0])). "'  ) ";
或者更简短的格式,不带引号

$query = "INSERT INTO sts (time) VALUES (" .  date("Ymd", mktime(0, 0, 0, $time[1], $time[2], $time[0])). "  ) ";
就我个人而言,我会:

$ts = strtotime($_POST['dat']);
if($ts != 0) {
  $date = date('Ymd',$ts);    
  $query = "INSERT INTO sts (time) VALUES ($date) ";
} else {
// invalid date format
}

正如其他人在评论中所说的那样:永远不要直接将
$\u POST
(或
$\u GET
或任何不受信任的数据)放在查询中。始终首先转义/清理数据。

日期存储为Y-m-d

因此,您的代码应该:

$query = "INSERT INTO sts (time) VALUES ( " .  date("Y-m-d", mktime(0, 0, 0, $time[1], $time[2], $time[0])). "  ) ";

日期存储为Y-m-d

因此,您的代码应该:

$query = "INSERT INTO sts (time) VALUES ( " .  date("Y-m-d", mktime(0, 0, 0, $time[1], $time[2], $time[0])). "  ) ";

如果您的两个PHP示例都引用了日期,则两者都不会。它们将生成如下所示的查询:

INSERT INTO sts (time) VALUES (2009-01-02);
$date = mysql_real_escape_string($_POST['dat']);

$query = "INSERT INTO sts (time) VALUES ('$dat');";
这将被解析为

INSERT INTO sts (time) VALUES (2006) 
2009-01-02是带两个减法的数字文字,不是日期。要让MySQL将其视为日期值,必须将其引用:

INSERT INTO sts (time) VALUES ('2009-01-02');
                               ^----------^--- quotes MUST be present
因此,您的PHP应该如下所示:

INSERT INTO sts (time) VALUES (2009-01-02);
$date = mysql_real_escape_string($_POST['dat']);

$query = "INSERT INTO sts (time) VALUES ('$dat');";

如果您的两个PHP示例都引用了日期,则两者都不会。它们将生成如下所示的查询:

INSERT INTO sts (time) VALUES (2009-01-02);
$date = mysql_real_escape_string($_POST['dat']);

$query = "INSERT INTO sts (time) VALUES ('$dat');";
这将被解析为

INSERT INTO sts (time) VALUES (2006) 
2009-01-02是带两个减法的数字文字,不是日期。要让MySQL将其视为日期值,必须将其引用:

INSERT INTO sts (time) VALUES ('2009-01-02');
                               ^----------^--- quotes MUST be present
因此,您的PHP应该如下所示:

INSERT INTO sts (time) VALUES (2009-01-02);
$date = mysql_real_escape_string($_POST['dat']);

$query = "INSERT INTO sts (time) VALUES ('$dat');";

date(“m-d-Y”)!=date(“Y-m-d”)
。如何格式化
dat
$query=“插入sts(时间)值(“.$”POST['dat']”)
小心避免使用这样的代码,这只是SQL注入的要求。请尝试使用PDO和预处理语句。这并不难,而且您只需要花费很少的时间来学习。@silentbag:请参见此处快速概述:(第3点,但您也需要阅读其他内容)
date(“m-d-Y”)!=date(“Y-m-d”)
。如何格式化
dat
$query=“插入sts(时间)值(“.$\u POST['dat']”)
小心避免使用这样的代码,这只是SQL注入的要求。请尝试使用PDO和预处理语句。这并不难,而且您只需要花费很少的时间来学习。@silentbag:请参阅此处以获得快速概述:(第3点,但您也需要阅读其他内容)我已经像你说的那样把它改成了Y-m-d。但是仍然是0000-00-00美元的POST['dat']里面有什么呢?如果我回显美元的POST['dat'],那正是我想要的。例如:2009-01-02我已经像你说的那样把它改成了Y-m-d。但是仍然是0000-00-00美元的POST['dat']里面有什么呢?如果我回显美元的POST['dat'],那正是我想要的。例如:2009-01-02$newdate=mysql U real\u escape POST字符串($'dat');$query=“插入sts(时间)值($newdate)”;它仍然是0000-00-00$newdate=mysql\u real\u escape\u字符串($\u POST['dat']);$query=“插入sts(时间)值($newdate)”;它仍然是0000-00-00