在放入数据库之前在php中设置日期

时间:2011-11-08 10:57:26

标签: php mysql date

我想把出生日期放到数据库中。所以我写了这个函数:

      function setAge($day, $month, $year)
  {
      $date= strtotime("$day $month $year");

       mysql("UPDATE controlpanel
             SET date_of_birth=$date
             WHERE=".this->$userID) or die(mysql_error());
  }

我不确定这是否正确,或者是更新日期的最佳方式。字段变量是DATE,..我不插入日期,我只是更新它..它会导致错误吗?这是将日期从php发布到mysql的最佳方法吗?

6 个答案:

答案 0 :(得分:1)

您应该将日期格式化为'yyyy-mm-dd',以便将SQL语句插入MySQL中。

答案 1 :(得分:1)

这里有很多错误。

  1. 您的查询格式错误。您没有在WHERE子句中指定要比较的字段。您需要执行类似WHERE userID = 123的内容。

  2. 你没有消毒你的价值观。 始终始终对查询数据使用适当的过滤功能。如果不这样做,那么您就可以使用SQL注入了。在这种情况下,您可能希望使用mysql_real_escape_string()

  3. 您使用strtotime()是错误的。您可以使用"{$year}-{$month}-{$day}"轻松手动格式化它。
  4. 只是为了强调:

    严重,正确地清理您的数据。你得到黑色。

答案 2 :(得分:0)

mysql_query( "UPDATE `controlpanel`
                 SET `date_of_birth`='".$year."-".$month."-".$day."'
                 WHERE `userid`=".this->$userID);

您的代码中存在相当多的代码错误。你甚至尝试过它吗? 无论如何,此代码不再需要strtotime调用。

答案 3 :(得分:0)

您不需要自定义函数,PHP具有预定义日期函数。

$date= date("Y-m-d", strtotime(mktime(0, 0, 0, $month, $day, $year)));

如果需要,可以使用strtotime()。

请参阅文档以获取更多详细信息http://php.net/manual/en/function.mktime.php

答案 4 :(得分:0)

kolink是正确的..在数据库日期数据类型格式是年 - 月 - 日,您还可以在时间戳中存储日期和时间,它将更容易处理..通过时间戳,您可以更灵活地处理日期和时间..

答案 5 :(得分:0)

如果您查看PHP手册,您会看到strtotime()返回整数,更具体地说是Unix timestamp。如果您查看MySQL手册,您会看到DATE列被处理为字符串

除了阅读文档之外,您还可以看到一些简单的调试出了问题。如果使用var_dump()打印查询并在您喜欢的MySQL客户端中运行它,您将看到您的行使用无效值更新(或者您收到错误消息,具体取决于服务器设置)。

现在,有很多方法可以创建格式正确的字符串。您似乎将各个组件保存到PHP变量中,因此您可以使用sprintf()

sprintf('%04d-%02d-%02d', $year, $month, $day)

更新:我正在添加一些其他版本以取悦@Col。弹片:

sprintf('%s-%s-%s', $year, $month, $day)
"$year-$month-$day"
$year . '-' . $month . '-' . $day