使用now /)在使用MySQL / PHP的字段中插入当前日期/时间

时间:2012-03-23 14:52:11

标签: php mysql datetime

由于MySQL显然无法在日期时间字段中自动插入函数now()以添加新记录(如某些其他数据库),基于注释,我明确地尝试使用SQL语句插入它。 (由于时间戳的各种限制,人们似乎认为时间戳与curdate()不是答案。)网上有很多文章建议使用SQL插入now()应该有效。

但是,当我尝试使用SQL语句插入日期时间时,该字段不会填充当前时间/日期,但它只给出了默认的0000-00-等等。这可能是语法错误,但它让我发疯,所以我发布它。

mysql_query("INSERT INTO users (first, last, whenadded) VALUES ('$first', '$last', now())"; 

它插入第一个和最后一个,但在添加时没有任何内容,在whenadded字段中留下稿件等。

字段类型是datetime,它没有排序规则,属性,null默认值或额外值。顺便说一句,我尝试将now()放在单引号中......它引发了一个错误。

9 个答案:

答案 0 :(得分:78)

NOW()通常在SQL语句中起作用并返回日期和时间。检查数据库字段是否具有正确的类型(日期时间)。否则,您始终可以使用PHP date()函数并插入:

date('Y-m-d H:i:s')

但我不建议这样做。

答案 1 :(得分:18)

您忘记关闭mysql_query命令:

mysql_query("INSERT INTO users (first, last, whenadded) VALUES ('$first', '$last', now())" ;

请注意最后一个括号。

答案 2 :(得分:7)

像Pekka说的,它应该以这种方式工作。我不能用这个自包含的例子重现这个问题:

<?php
    $pdo = new PDO('mysql:host=localhost;dbname=test;charset=utf8', 'localonly', 'localonly');
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    $pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);

    $pdo->exec('
        CREATE TEMPORARY TABLE soFoo (
            id int auto_increment,
            first int,
            last int,
            whenadded DATETIME,
            primary key(id)
        )
    ');
    $pdo->exec('INSERT INTO soFoo (first,last,whenadded) VALUES (0,1,Now())');
    $pdo->exec('INSERT INTO soFoo (first,last,whenadded) VALUES (0,2,Now())');
    $pdo->exec('INSERT INTO soFoo (first,last,whenadded) VALUES (0,3,Now())');

    foreach( $pdo->query('SELECT * FROM soFoo', PDO::FETCH_ASSOC) as $row ) {
        echo join(' | ', $row), "\n";
    }

哪(当前)打印

1 | 0 | 1 | 2012-03-23 16:00:18
2 | 0 | 2 | 2012-03-23 16:00:18
3 | 0 | 3 | 2012-03-23 16:00:18

这里(几乎)使用TIMESTAMP字段和DEFAULT CURRENT_TIMESTAMP进行相同的脚本:

<?php
    $pdo = new PDO('mysql:host=localhost;dbname=test;charset=utf8', 'localonly', 'localonly');
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    $pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);

    $pdo->exec('
        CREATE TEMPORARY TABLE soFoo (
            id int auto_increment,
            first int,
            last int,
            whenadded TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
            primary key(id)
        )
    ');
    $pdo->exec('INSERT INTO soFoo (first,last) VALUES (0,1)');
    $pdo->exec('INSERT INTO soFoo (first,last) VALUES (0,2)');
    sleep(1);
    $pdo->exec('INSERT INTO soFoo (first,last) VALUES (0,3)');

    foreach( $pdo->query('SELECT * FROM soFoo', PDO::FETCH_ASSOC) as $row ) {
        echo join(' | ', $row), "\n";
    }

方便地,时间戳转换为与第一个示例中相同的日期时间字符串表示 - 至少使用我的PHP / PDO / mysqlnd版本。

答案 3 :(得分:6)

我能想到的唯一原因是你将它添加为字符串'now()',而不是函数调用now()
或者其他任何错字。

SELECT NOW();

看它是否返回正确的值?

答案 4 :(得分:2)

  

现在()

为我工作。 但我的字段类型仅为日期,而您的字段类型为日期时间。我不确定是否是这种情况

答案 5 :(得分:1)

这些对我来说都很好......

<?php
  $db = mysql_connect('localhost','user','pass');
  mysql_select_db('test_db');

  $stmt = "INSERT INTO `test` (`first`,`last`,`whenadded`) VALUES ".
          "('{$first}','{$last}','NOW())";
  $rslt = mysql_query($stmt);

  $stmt = "INSERT INTO `users` (`first`,`last`,`whenadded`) VALUES ".
          "('{$first}', '{$last}', CURRENT_TIMESTAMP)";
  $rslt = mysql_query($stmt);

?>

旁注:mysql_query()不是在当前版本的PHP中连接MySQL的最佳方式。

答案 6 :(得分:1)

SYSDATE()怎么样?

Zipping the folder once you are done reading with the XML file >> Move the Zipped file to the destination >> Delete the remains.

查看https://github.com/enthought/traits/blob/master/traits/has_traits.py#L2330以获取有关NOW()和SYSDATE()的更多信息。

答案 7 :(得分:1)

当前,使用新版本的Mysql可以自动插入当前日期,而无需在PHP文件中添加代码。您可以在设置数据库的同时通过Mysql实现该目标,如下所示:

enter image description here

现在,任何新帖子都会自动获得唯一的日期和时间。 希望对您有所帮助。

答案 8 :(得分:0)

只需转到添加时列,然后将默认值更改为 CURRENT_TIMESTAMP