在更新时将以前的时间戳保留在mysql中

时间:2015-11-23 06:32:46

标签: php mysql codeigniter

我不想在更新时更新我的​​时间戳字段。我需要在该字段中保留以前的日期时间。但即使我尝试了

,它也会自动更新
$data = array(
                'start_time' => $start,//previous datetime
                'user_id' => $agent_id,
                ....
            );
            $this->db->where('id', $chat_id)->update('chat_state', $data );

当我离开$start或强制使用上一个日期时间时。两种情况都不起作用。在两种情况下都使用CURRENT TIMESTAMP进行更新

这里有什么不对吗?

3 个答案:

答案 0 :(得分:2)

使用strerror连接到您的mysql服务器,通过运行以下查询来检查表的架构:

USE mydatabase;    
SHOW CREATE TABLE mytable;

我打赌你会看到与你的 start_time 字段相关联的 ON UPDATE CURRENT_TIMESTAMP

请注意,依靠DBMS自动更新值并不是一个好习惯;它会给你带来惊喜,你最终会花费数小时来解决这个问题。

让我们删除“ON UPDATE CURRENT_TIMESTAMP”条款,如下所示:

ALTER TABLE mytable MODIFY start_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP;

这应该可以解决问题。

详细了解MySQL Workbench

答案 1 :(得分:0)

请按照以下步骤操作

  1. 选择现值(start_time
  2. 将现有值更新为新字段
  3. 插入新值
  4. 01在db

    中选择当前值
    $query = $this->db->query("SELECT start_time FROM chat_state WHERE user_id = $chat_id");
    $result = $query->result_array();
    

    02更新存在值

    $data = array(
        'old_time' => $result[0]['start_time'] // move start_time to new field 
    );
    $this->db->where('id', $chat_id)->update('chat_state', $data );
    

    03插入新值

    $data = array(
        'start_time' => date('Y-m-d H:i:s'),     // new Time stamp
        'user_id' => $agent_id
    );
    $this->db->where('id', $chat_id)->update('chat_state', $data );
    

答案 2 :(得分:0)

可能你的列类型为DATETIME;您需要将类型更改为TIMESTAMP并默认为null。它不会自动更新。

然后,插入数据时

'start_time'=>date("Y-m-d H:i:s")

当你想在视图中打印时

date('d-M-y', strtotime($record['start_time']));