SQL:插入数据库时​​的当前时间戳+ 1小时

时间:2016-07-19 10:03:42

标签: mysql timestamp

我环顾四周,只看到这个在使用SELECT时被使用,而不是INSERT,它让我很困惑。

我一直在尝试的是:

$statement = $pdo->prepare("INSERT INTO shipments (crate_type_id, username, arrival, quantity, type, status) VALUES ('$crate_type_id', '$username', 'DATE_ADD(NOW() + INTERVAL 1 HOUR)', '$quantity', 'purchase', 'active')");

我没有收到任何错误,只会插入"0000-00-00 00:00:00"。我已尝试在phpmyadmin等中进行故障排除,但没有取得任何进展。

2 个答案:

答案 0 :(得分:1)

您应该在date_add表达式中删除引号,并使用逗号而不是

statement = $pdo->prepare("INSERT INTO shipments 
  (crate_type_id, username, arrival, quantity, type, status) 
  VALUES ('$crate_type_id', '$username',
         DATE_ADD(NOW() ,  INTERVAL 1 HOUR) ,
           '$quantity', 'purchase', 'active')");

答案 1 :(得分:0)

首先,您错误地使用了PDO::prepare()。该工具的整个目的是分离代码和数据,但是您将后者注入前者,就好像尚未发明预编译语句一样。手册中有几个例子,所以我不再重复,但简而言之,你必须:

  1. 在SQL代码(?:foo
  2. 中插入占位符
  3. 提供执行时的实际值
  4. 其次,我建议您在严格模式下配置MySQL,这样就不会像0000-00-00 00:00:00那样结束垃圾。您可以在连接上设置正确的SQL模式,例如:

    SET @@SESSION.sql_mode='TRADITIONAL'
    

    最后,您的最终SQL代码甚至可能无效,但显然您没有收到有关它的通知。我建议您在连接代码中添加以下内容:

    $pdo = new PDO($dsn, $user, $pass, [PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION]);
    

    ...并确保您已配置PHP开发框以显示所有错误。