在“form.php”中
<html>
<body>
<form action="process.php" method="post">
<input type="text" name="dat" />
<input type="submit" value="submit" />
</form>
</body>
</html>
在“process.php”中:
<?php
echo $_POST['dat'];
mysql_connect("localhost", "root", "123456")
or die("can't connect");
mysql_select_db("st")
or die("can't selectdb");
$query = "INSERT INTO sts (time) VALUES ( " . $_POST['dat']. " ) ";
$result = mysql_query($query)
or die(mysql_error());
$mysql_close();
?>
这给了我在数据库中的函数,在“DATE”类型的字段名称“time”中。 如果使用这个:
$time = explode("-", $_POST['dat']);
$query = "INSERT INTO sts (time) VALUES ( " . date("m-d-Y", mktime(0, 0, 0, $time[1], $time[2], $time[0])). " ) ";
- &GT;不起作用
编辑: 我已经从“m-d-Y”改为“Y-m-d”以获得适当的语义,但它仍然不起作用
但是,如果我改变这样的代码:
$query = "INSERT INTO sts (time) VALUES ('1991-10-05') ";
它有效。
有人可以帮我解释一下吗?
答案 0 :(得分:2)
您希望date("Y-m-d"
不是date("m-d-Y"
See here for explanation of what date/time formats MySQL accepts
如果你使用这种格式,你还需要在日期前引用,因为没有它们,MySQL认为你正在插入一个nymber: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
}
就像其他人在评论中所说:永远不要将$_POST
(或$_GET
或任何不受信任的数据)直接放入您的查询中。始终首先逃避/清理数据。
答案 1 :(得分:1)
日期存储为Y-m-d
所以你的代码应该这样做:
$query = "INSERT INTO sts (time) VALUES ( " . date("Y-m-d", mktime(0, 0, 0, $time[1], $time[2], $time[0])). " ) ";
答案 2 :(得分:0)
两个PHP示例都没有引用日期。他们将生成如下所示的查询:
INSERT INTO sts (time) VALUES (2009-01-02);
将被解析为
INSERT INTO sts (time) VALUES (2006)
2009-01-02是一个带有两个减法的数字文字,而不是日期。要让MySQL将其视为日期值,必须引用它:
INSERT INTO sts (time) VALUES ('2009-01-02');
^----------^--- quotes MUST be present
所以你的PHP应该是这样的:
$date = mysql_real_escape_string($_POST['dat']);
$query = "INSERT INTO sts (time) VALUES ('$dat');";