首页 文章

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

提问于
浏览
40

由于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()放在单引号中......它引发了一个错误 .

7 回答

  • 7

    那么SYSDATE()呢?

    <?php
      $db = mysql_connect('localhost','user','pass');
      mysql_select_db('test_db');
    
      $stmt = "INSERT INTO `test` (`first`,`last`,`whenadded`) VALUES ".
              "('{$first}','{$last}','SYSDATE())";
      $rslt = mysql_query($stmt);
    ?>
    

    有关NOW()和SYSDATE()的更多信息,请查看Difference between NOW(), SYSDATE() & CURRENT_DATE() in MySQL .

  • 1

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

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

    但我不建议这样做 .

  • 1

    你忘了关闭mysql_query命令:

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

    请注意最后一个括号 .

  • 16

    像佩卡说,它应该这样工作 . 我不能用这个自包含的例子重现问题:

    <?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版本 .

  • 6

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

    SELECT NOW();
    

    看它是否返回正确的值?

  • 2

    现在()

    为我工作 . 但是我的字段类型只有 date 而你的字段是 datetime . 我不确定是不是这样

  • 69

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

    <?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的最佳方式 .

相关问题