【问题标题】:Inserting a Date and Time value to a MySql from PHP从 PHP 将日期和时间值插入 MySql
【发布时间】:2010-06-01 03:54:34
【问题描述】:

您好,我想以与 mysql DateTime 格式兼容的格式向 MySQL 数据库发送日期和时间,即:0000-00-00 00:00:00 ...

我正在使用这个从 PHP 命令中获取日期和时间的代码:

   $insert = "INSERT INTO sms (ref, texto, fecha)
   VALUES ('".$_POST['usuario']."', '".$_POST['sms']."', '".date(DATE_ATOM, mktime(0, 0, 0, 7, 1, 2000))."')";
   $add_member = mysql_query($insert);

我真的很想这样做,但是使用 MySQL 命令,我的意思是,使用来自 mysql 服务器的日期和时间。谢谢

【问题讨论】:

  • 你应该阅读 SQL 注入和清理用户输入。您似乎正在编写易受攻击的代码。
  • 您要插入什么日期?当前日期和时间还是 2000 年 7 月 1 日?

标签: php mysql datetime


【解决方案1】:

插入记录时使用NOW()INSERT INTO table (date) VALUES (NOW())

对于您的代码:

$insert = "INSERT INTO sms (ref, texto, fecha)
VALUES ('".$_POST['usuario']."', '".$_POST['sms']."', NOW() )";
$add_member = mysql_query($insert);

【讨论】:

  • 您能在我的代码中添加它吗? $insert = "INSERT INTO sms (ref, texto, fecha) VALUES ('".$_POST['usuario']."', '".$_POST['sms']."', '".date(DATE_ATOM , mktime(0, 0, 0, 7, 1, 2000))."')"; $add_member = mysql_query($insert);
  • @DomingoSL - 好的,我更新了我的帖子。我的代码在 MySQL 服务器上发布当前时间。它不会在 2000 年 7 月 1 日发布。如果你打算这样做,你最好只做 '2000-07-01'
  • @DomingoSL - fechaDATETIME 类型吗?除此之外......我知道代码有效,我在我的许多网站中使用它。所以我不确定出了什么问题。你遇到了什么错误?
  • 我解决了,我真的不知道怎么解决,也许你能帮助我理解我做了什么,我将代码更改为: $insert = "INSERT INTO sms (ref, texto, fecha) VALUES ( '" .addslashes($_POST['usuario']) ."', '" .addslashes($_POST['sms']) ."', NOW() )";而且效果很好!
  • 不要使用addslashes();它转义了一些错误的字符。正确的函数是mysql_real_escape_string()
【解决方案2】:

MySQL 仅允许提供有限数量的日期格式作为输入。来自MySQL manual

仅支持以下部分中描述的格式。我们希望您提供合法值。如果您使用其他格式的值,可能会出现不可预测的结果。

您提供的日期格式为 Y-m-d\TH:i:sPDATE_ATOM 常量的值),MySQL 不支持这种格式(尽管它可能根据当前的SQL 模式)。

您应该改用date('Y-m-d H:i:s', ...)

附注而且,是的,您应该保护您的代码免受 SQL 注入。

【讨论】:

  • 在 MySQL 5.1 中(至少)你可以使用 DATE_ATOM 格式,根据MySQL manual:The date and time parts can be separated by T rather than a space. For example, '2012-12-31 11:30:45' '2012-12-31T11:30:45' are equivalent.
【解决方案3】:
$date = date("Y-m-d H:i:s", mktime(0, 0, 0, 7, 1, 2000));

$usuario = mysql_real_escape_string($_POST['usuario']);
$sms = mysql_real_escape_string($_POST['sms']);
$date = mysql_real_escape_string($date);

$sql = "INSERT INTO sms (ref, texto, fecha) VALUES ('$usuario', '$sms', '$date')";
mysql_query($sql) or trigger_error(mysql_error().$sql);

【讨论】:

    【解决方案4】:

    首先我想告诉你,你应该遵循 cmets 中的建议并阅读 SQL 注入。

    此代码将以正确的格式插入具有当前时间的记录。

    $insert = "INSERT INTO sms (ref, texto, fecha)
    VALUES ('".$_POST['usuario']."', '".$_POST['sms']."', '".date('Y-m-d H:i:s')."' )";
    $add_member = mysql_query($insert);
    

    如果您不想要当前时间,则需要更改 date('Y-m-d H:i:s') 进入 date('Y-m-d H:i:s', some_unix_timestamp)

    【讨论】:

      猜你喜欢
      • 2011-02-25
      • 1970-01-01
      • 2016-04-01
      • 2016-08-20
      • 1970-01-01
      • 2017-10-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-21
      相关资源
      最近更新 更多