如何正确地将时间戳插入mysql?

时间:2015-03-14 14:21:33

标签: php mysql

这是我的表格数字结构:

mysql> show columns from num;
+-------+-----------+------+-----+-------------------+-----------------------------+
| Field | Type      | Null | Key | Default           | Extra                       |
+-------+-----------+------+-----+-------------------+-----------------------------+
| ip    | char(20)  | YES  |     | NULL              |                             |
| time  | timestamp | NO   |     | CURRENT_TIMESTAMP | on update CURRENT_TIMESTAMP |
+-------+-----------+------+-----+-------------------+-----------------------------+
2 rows in set (0.00 sec)

我使用以下代码插入记录:

<?php   
    $ip = $_SERVER['REMOTE_ADDR'];
    $time=$_SERVER['REQUEST_TIME'];
    $db=mysql_connect("localhost","root","passwd");
    $query="insert into  num(ip,time) values('$ip','$time')";
    mysql_select_db('numdb');
    mysql_query($query, $db);
    mysql_close();
    echo "ok";
?>      

将两条记录插入表num后,时间错了 我的数据库或php代码有什么关系?

mysql> select * from num;
+-----------+---------------------+
| ip        | time                |
+-----------+---------------------+
| 127.0.0.1 | 0000-00-00 00:00:00 |
| 127.0.0.1 | 0000-00-00 00:00:00 |
+-----------+---------------------+
2 rows in set (0.00 sec)

2 个答案:

答案 0 :(得分:1)

要插入当前时间戳,请使用:

$query="INSERT INTO num(time) VALUES (CURRENT_TIMESTAMP)";

如果您的服务器时间与您想要的不同,您可以在时间戳中添加小时(或分钟等):

$query="INSERT INTO num(time) VALUES (CURRENT_TIMESTAMP + INTERVAL 6 HOUR)";

答案 1 :(得分:-1)

看起来您想要使用REQUEST_TIME值而不是当前时间。幸运的是,php可以很容易地将请求时间的字符串格式转换为内部时间格式,然后将其转换为

2015-03-14 15:19:27

MySQL表示时间戳所需的标准化字符串格式。这一行将为您提供可行的日期字符串。

  $datestring = date('Y-m-d H:i:s', $_SERVER['REQUEST_TIME']);

如果您不关心REQUEST_TIME与当前时间之间的区别,请不要在timestamp查询中提及INSERT列,而MySQL将使用默认(当前时间)。

专业提示:不要为列timestamp命名,因为它是一个保留字。在某些情况下,你必须将它包装在反引号中。许多开发人员使用ts进行此操作。