我有以下代码:
$radate = date('Y-d-m h:i:s');
echo $radate;
foreach($_POST['member'] as $member)
{
mysql_query("INSERT INTO attend (UserName, rDate) values('$member', '$radate')");
mysql_query("UPDATE users set rAttend=(rAttend+1) where UserName='$member'");
}
mysql_query("INSERT INTO raids (rDate) value('$radate')");
mysql_query("UPDATE users SET rTotal=(rTotal+1)");
mysql_close();
?>
目前回声正在打印: 2011-14-08 09:47:17
但是当我做这样的诊断时:
$result_id = mysql_query('SELECT * from raids');
if($result_id)
{
$results = array();
while($row = mysql_fetch_assoc($result_id))
{
$results[] = $row;
}
echo '<pre>';
print_r($results);
echo '</pre>';
}
else
echo mysql_error();
我将此作为输出:
Array
(
[0] => Array
(
[raidID] => 1
[rDate] => 0000-00-00 00:00:00
)
[1] => Array
(
[raidID] => 2
[rDate] => 0000-00-00 00:00:00
)
[2] => Array
(
[raidID] => 3
[rDate] => 0000-00-00 00:00:00
)
[3] => Array
(
[raidID] => 4
[rDate] => 0000-00-00 00:00:00
)
)
所以,以更简洁的方式,在插入时间时我做错了什么?
答案 0 :(得分:2)
MySQL的日期格式为Y-m-d H:i:s
,而非Y-d-m h:i:s
:)
它应该与$radate = date('Y-m-d H:i:s');
顺便说一句,不要忘记逃避查询中的任何内容:
mysql_query("INSERT INTO attend (UserName, rDate) values('" . mysql_real_escape_string($member). "', '" . mysql_real_escape_string($radate) . "')");
答案 1 :(得分:1)
如果发生这种情况,您应该在INSERT
之后查询警告。可能会有警告指出你出了什么问题。
$radate = date('Y-m-d h:i:s');
才能获得正确的2011-08-14 19:01:30
。由于没有第14个月,因此第14个月没有第8天。
`
此外,当您将$ _POST中的数据立即导入数据库时,您很容易受到SQL注入攻击。而不是
INSERT INTO attend (UserName, rDate) values('$member', '$radate')
你应该做
INSERT INTO attend (UserName, rDate) values('" . mysql_real_escape($member). "', '$radate')
因为这可以防止恶意用户将POST
ed值设置为', ''); DELETE FROM attend; --
。